💎 خلاصهی مفاهیم کدنویسی تمیز مخصوص NET.
🔰Awesome Clean Code for C# and .NET
https://github.com/thangchung/clean-code-dotnet
___________________
@DotNetZoom
🔰Awesome Clean Code for C# and .NET
https://github.com/thangchung/clean-code-dotnet
___________________
@DotNetZoom
Security_2
DotNetZoom
✅ ویس ضبط شده نهمین گفتگوی فنی #فری_تاک با موضوع Security (قسمت دوم)
ارائه دهندگان : مجتبی تاجیک، محمدجواد ابراهیمی
_________________
@DotNetZoom
ارائه دهندگان : مجتبی تاجیک، محمدجواد ابراهیمی
_________________
@DotNetZoom
DotNetZoom
DotNetZoom – Security_2
✅ مباحث و کلمات کلیدی ایی که در این جلسه از #فری_تاک در موردشون صحبت کردیم
- CSRF/XSRF
- Open/Unvalidated Redirection
- CSP (Content Security Policy)
- SRI (Subresource Integrity)
- CORS (Cross Origin Resource Sharing)
- DDOS
- Security of JWT and Refresh Token
- Key Secrets Storage
- Malicious File Upload
- Decompiling, Obfuscate and Deobfuscate
لیست کلیه مواردی که این جلسه قبل و این جلسه در موردشون صحبت کردیم و میکنیم رو میتونین تو لینک زیر مشاهده کنین (میتونین به عنوان چک لیست هم بهش نگاه کنین)
https://www.notion.so/Free-Talk-Security-8ab8909ae77f451abf9f391a0da8b072
🔰لیست آموزش ها جهت مطالعه بیشتر:
افزودن هدرهای Content Security Policy به برنامههای ASP.NET
https://www.dntips.ir/post/1604
تولید هدرهای Content Security Policy توسط ASP.NET Core برای برنامههای Angular
https://www.dntips.ir/post/2706
رمزنگاری JWT و افزایش امنیت آن در ASP.NET Core
https://www.dotnettips.info/post/2992
افزایش امنیت JWT توسط Refresh Token در ASP NET Core
https://news.1rj.ru/str/DotNetZoom/1027
هک برنامه های دات نتی با dnSpy و de4dot + معرفی ویدئو های آموزش زبان اصلی
https://news.1rj.ru/str/DotNetZoom/1012
OWASP Security Cheat Sheet
https://cheatsheetseries.owasp.org/Glossary.html
OWASP .NET Security Cheat Sheet
https://cheatsheetseries.owasp.org/cheatsheets/DotNet_Security_Cheat_Sheet.html
Configuring CSP using NWebSec
https://docs.nwebsec.com/en/4.1/nwebsec/Configuring-csp.html
Awesome .NET Obfuscator
https://github.com/NotPrab/.NET-Obfuscator
Awesome .NET Deobfuscator
https://github.com/NotPrab/.NET-Deobfuscator
🔰لیست ابزار های معرفی شده:
RateLimit and Throttle
https://www.nuget.org/packages/AspNetCoreRateLimit/
https://www.nuget.org/packages/WebApiThrottle/
File Signature/Type Detector
https://www.nuget.org/packages/FileSignatures/
https://www.nuget.org/packages/myrmec/
https://www.nuget.org/packages/File.TypeChecker/
Key Vault
https://www.nuget.org/packages/VaultSharp/
https://github.com/hashicorp/vault
SRI Hash Generator
https://www.srihash.org/
.NET Decompiler
https://github.com/dnSpy/dnSpy
https://github.com/icsharpcode/ILSpy
https://www.jetbrains.com/decompiler/
https://www.red-gate.com/products/dotnet-development/reflector/
.NET Deobfuscator
https://github.com/de4dot/de4dot
__________________
@DotNetZoom
- CSRF/XSRF
- Open/Unvalidated Redirection
- CSP (Content Security Policy)
- SRI (Subresource Integrity)
- CORS (Cross Origin Resource Sharing)
- DDOS
- Security of JWT and Refresh Token
- Key Secrets Storage
- Malicious File Upload
- Decompiling, Obfuscate and Deobfuscate
لیست کلیه مواردی که این جلسه قبل و این جلسه در موردشون صحبت کردیم و میکنیم رو میتونین تو لینک زیر مشاهده کنین (میتونین به عنوان چک لیست هم بهش نگاه کنین)
https://www.notion.so/Free-Talk-Security-8ab8909ae77f451abf9f391a0da8b072
🔰لیست آموزش ها جهت مطالعه بیشتر:
افزودن هدرهای Content Security Policy به برنامههای ASP.NET
https://www.dntips.ir/post/1604
تولید هدرهای Content Security Policy توسط ASP.NET Core برای برنامههای Angular
https://www.dntips.ir/post/2706
رمزنگاری JWT و افزایش امنیت آن در ASP.NET Core
https://www.dotnettips.info/post/2992
افزایش امنیت JWT توسط Refresh Token در ASP NET Core
https://news.1rj.ru/str/DotNetZoom/1027
هک برنامه های دات نتی با dnSpy و de4dot + معرفی ویدئو های آموزش زبان اصلی
https://news.1rj.ru/str/DotNetZoom/1012
OWASP Security Cheat Sheet
https://cheatsheetseries.owasp.org/Glossary.html
OWASP .NET Security Cheat Sheet
https://cheatsheetseries.owasp.org/cheatsheets/DotNet_Security_Cheat_Sheet.html
Configuring CSP using NWebSec
https://docs.nwebsec.com/en/4.1/nwebsec/Configuring-csp.html
Awesome .NET Obfuscator
https://github.com/NotPrab/.NET-Obfuscator
Awesome .NET Deobfuscator
https://github.com/NotPrab/.NET-Deobfuscator
🔰لیست ابزار های معرفی شده:
RateLimit and Throttle
https://www.nuget.org/packages/AspNetCoreRateLimit/
https://www.nuget.org/packages/WebApiThrottle/
File Signature/Type Detector
https://www.nuget.org/packages/FileSignatures/
https://www.nuget.org/packages/myrmec/
https://www.nuget.org/packages/File.TypeChecker/
Key Vault
https://www.nuget.org/packages/VaultSharp/
https://github.com/hashicorp/vault
SRI Hash Generator
https://www.srihash.org/
.NET Decompiler
https://github.com/dnSpy/dnSpy
https://github.com/icsharpcode/ILSpy
https://www.jetbrains.com/decompiler/
https://www.red-gate.com/products/dotnet-development/reflector/
.NET Deobfuscator
https://github.com/de4dot/de4dot
__________________
@DotNetZoom
Felony on Notion
Free Talk - Security
Intro (5 Min)
✅ ساخت و اعمال شرط های ِDynamic در NET Core.
اینکه چطور اینکار رو انجام بدیم روش های مختلفی داره و از جنبه های مختلفی میشه بررسیش کرد
در این پست میخوام ابزار ها وکتابخونه های مختلف برای این کار رو معرفی کنم و در آخر یک نمونه پروژه که این کار رو به صورت عملی انجام داده معرفی کنم
🔸برای اعمال شرط به صورت داینامیک روی Linq بهترین کتابخونه اینه
System.Linq.Dynamic.Core (نسخه .NET Core)
System.Linq.Dynamic (نسخه .NET Full Framework)
🔹اگه نمیدونین چیه یا دنبال آموزشش میگردین اینم داکیومنت اش
https://github.com/StefH/System.Linq.Dynamic.Core/wiki/Dynamic-Expressions
🔸برای سمت فرانت اگر به یه پلاگین کوئری ساز داینامیک ترو تمیز نیاز دارین این چیز خوبیه
https://querybuilder.js.org/demo.html
این پلاگین شرط های ساخته شده رو به صورت json ارسال میکنه به سرور، پس سمت سرور باید این شرط ها به Expression های معادلشون ترجمه بشن تا توی دات نت قابل استفاده باشن. این کار با استفاده از Expression Tree قابل انجام هست.
البته لازم نیس خودتون اینکارو بکنین، پروژه زیر قبلا اینکارو انجام داده
🔹اینم نمونه پیاده سازی کامل یه پروژه ASP Core ایی که از همین پلاگین jQuery واسه ساخت شرط های پویا سمت front استفاده کرده و سمت backend هم میاد این شرط ها رو به Expression/Func ترجمه میکنه و اعمال میکنه
در نتیجه میشه شرط هاش توی Linq to Object (که Func میگیره) و همچنین روی ORM ها (که Expression میگیرن) اعمال کرد
https://github.com/castle-it/dynamic-linq-query-builder
🔸این هم ربطی به بالایی ها نداره ولی چیز باحالیه، یه کتابخونه اس که امکانش رو میده توی سی شارپ بتونین شرط های داینامیک ایجاد و بعد خودش اونها روبه Expression تبدیل میکنه
همچنین یه کامپوننت مخصوص WinForms هم داره که این امکان رو میده توی برنامه های ویندوزی توسط UI شرط های پویا بسازین
https://github.com/dbelmont/ExpressionBuilder
___________________
@DotNetZoom
اینکه چطور اینکار رو انجام بدیم روش های مختلفی داره و از جنبه های مختلفی میشه بررسیش کرد
در این پست میخوام ابزار ها وکتابخونه های مختلف برای این کار رو معرفی کنم و در آخر یک نمونه پروژه که این کار رو به صورت عملی انجام داده معرفی کنم
🔸برای اعمال شرط به صورت داینامیک روی Linq بهترین کتابخونه اینه
System.Linq.Dynamic.Core (نسخه .NET Core)
System.Linq.Dynamic (نسخه .NET Full Framework)
🔹اگه نمیدونین چیه یا دنبال آموزشش میگردین اینم داکیومنت اش
https://github.com/StefH/System.Linq.Dynamic.Core/wiki/Dynamic-Expressions
🔸برای سمت فرانت اگر به یه پلاگین کوئری ساز داینامیک ترو تمیز نیاز دارین این چیز خوبیه
https://querybuilder.js.org/demo.html
این پلاگین شرط های ساخته شده رو به صورت json ارسال میکنه به سرور، پس سمت سرور باید این شرط ها به Expression های معادلشون ترجمه بشن تا توی دات نت قابل استفاده باشن. این کار با استفاده از Expression Tree قابل انجام هست.
البته لازم نیس خودتون اینکارو بکنین، پروژه زیر قبلا اینکارو انجام داده
🔹اینم نمونه پیاده سازی کامل یه پروژه ASP Core ایی که از همین پلاگین jQuery واسه ساخت شرط های پویا سمت front استفاده کرده و سمت backend هم میاد این شرط ها رو به Expression/Func ترجمه میکنه و اعمال میکنه
در نتیجه میشه شرط هاش توی Linq to Object (که Func میگیره) و همچنین روی ORM ها (که Expression میگیرن) اعمال کرد
https://github.com/castle-it/dynamic-linq-query-builder
🔸این هم ربطی به بالایی ها نداره ولی چیز باحالیه، یه کتابخونه اس که امکانش رو میده توی سی شارپ بتونین شرط های داینامیک ایجاد و بعد خودش اونها روبه Expression تبدیل میکنه
همچنین یه کامپوننت مخصوص WinForms هم داره که این امکان رو میده توی برنامه های ویندوزی توسط UI شرط های پویا بسازین
https://github.com/dbelmont/ExpressionBuilder
___________________
@DotNetZoom
Telegram
Attach Files
Forwarded from کدهک
آینده توسعه اپلیکیشن های مدرن با دات نت
دات نت 6 و ASP NET Core از همیشه سریعتر شده است و EF Core هم از نظر پرفورمنس در جایگاه خوبی در مقایسه با Dapper و سایر ORM ها قرار گرفته است.
قابلیت Minimal API امکان میدهد اپلیکیشن های کوچک و سبک تحت وب پیاده کنید بدون نیاز به Razor Page یا کنترلر ها که در میکروسرویس و فضای ابری کاربرد زیادی دارد.
در سی شارپ 10 امکان تعریف Namespace گلوبال اضافه شده است و دیگر نیاز نیست در هر فایل using قرار بگیرد. همچنین برای تعریف Namespace دیگر نیاز به تعریف اسکوپ جدا وجود ندارد.
بلیزور مجهز به Hotreload شده و بدون بارگذاری و اجرای مجدد برنامه میتوان تغییرات را مشاهده کرد.
امکان ایزوله کردن CSS و پابلیش پروژه به صورت Shadow در ASP NET Core اضافه شده است.
دات نت 6 به همراه MAUI منتشر میشود که امکان ایجاد اپ با کد و سولوشن یکسان در اندروید،ویندوز و مک را فراهم میکند.
https://youtu.be/GJ_PaRNDe9E
دات نت 6 و ASP NET Core از همیشه سریعتر شده است و EF Core هم از نظر پرفورمنس در جایگاه خوبی در مقایسه با Dapper و سایر ORM ها قرار گرفته است.
قابلیت Minimal API امکان میدهد اپلیکیشن های کوچک و سبک تحت وب پیاده کنید بدون نیاز به Razor Page یا کنترلر ها که در میکروسرویس و فضای ابری کاربرد زیادی دارد.
در سی شارپ 10 امکان تعریف Namespace گلوبال اضافه شده است و دیگر نیاز نیست در هر فایل using قرار بگیرد. همچنین برای تعریف Namespace دیگر نیاز به تعریف اسکوپ جدا وجود ندارد.
بلیزور مجهز به Hotreload شده و بدون بارگذاری و اجرای مجدد برنامه میتوان تغییرات را مشاهده کرد.
امکان ایزوله کردن CSS و پابلیش پروژه به صورت Shadow در ASP NET Core اضافه شده است.
دات نت 6 به همراه MAUI منتشر میشود که امکان ایجاد اپ با کد و سولوشن یکسان در اندروید،ویندوز و مک را فراهم میکند.
https://youtu.be/GJ_PaRNDe9E
❇️ معرفی چندین پروژه Starter Template برای ASP .NET Core و React - Vue - Angular
🔰پروژه های ASP .NET Core + React
▪️https://github.com/bradymholt/aspnet-core-react-template
ASP.NET Core 3.1 / React SPA Template App
▪️https://github.com/NickMaev/react-core-boilerplate
Powerful ASP.NET Core 3 templates with React, true server-side rendering and Docker support
▪️https://github.com/CodAffection/React-CRUD-with-Asp.Net-Core-Web-API
Full Stack React js CRUD with Asp.Net Core Web
▪️https://github.com/microsoft/AspNetCore-React-WebApp
ASP.NET Core backend + React frontend + Entity Framework Core + automated testing
▪️https://github.com/based-ghost/aspnet-core-react-redux-playground-template
SPA template built with ASP.NET Core 5.0 + React + Redux + TypeScript + Hot Module Replacement (HMR)
▪️https://github.com/NetCoreTemplates/react-spa
.NET 5.0 React Create App CLI Bootstrap App
🔰پروژه های ASP .NET Core + Vue
▪️https://github.com/TrilonIO/aspnetcore-Vue-starter
Asp.net Core & Vue.js (ES6) SPA Starter kit - Vuex, webpack, Web API, Docker, and more!
▪️https://github.com/SoftwareAteliers/asp-net-core-vue-starter
ASP.NET Core + Vue.js starter project
▪️https://github.com/danijelh/aspnetcore-vue-typenoscript-template
Template AspNetCore with Vue, Vue router, Vuex, TypeScript, Bulma, Sass and Jest
▪️https://github.com/NetCoreTemplates/vue-spa
.NET 5.0 Vue CLI Bootstrap App
▪️https://github.com/damienbod/AspNetCoreMvcVueJs
ASP.NET Core with Vue.js
▪️https://github.com/based-ghost/aspnet-core-vue-vuex-playground-template
SPA template built with ASP.NET Core 5.0 + Vue + Vuex + TypeScript + Hot Module Replacement (HMR)
🔰پروژه های ASP .NET Core + Angular
▪️https://github.com/TrilonIO/aspnetcore-angular-universal
ASP.NET Core & Angular Universal advanced starter - PWA w/ server-side rendering for SEO, Bootstrap, i18n internationalization, TypeScript, unit testing, WebAPI REST setup, SignalR, Swagger docs, and more!
▪️https://github.com/emonney/QuickApp
ASP.NET Core 3.1 / Angular 9 startup project template with complete login, user and role management. Plus other useful services for Quick Application Development
▪️https://github.com/FabianGosebrink/ASPNETCore-Angular-Ngrx
An ASP.NET Core WebAPI Demo with an Angular Client using Ngrx store and effects and Signalr
▪️https://github.com/jasontaylordev/SecureSpa
ASP.NET Core 3 + Angular 8 + ASP.NET Identity generated using .NET Core SDK
▪️https://github.com/DanWahlin/AngularCLI-ASPNET-Core-CustomersService
Example of integrating Angular with ASP.NET Core RESTful Services
▪️https://github.com/NetCoreTemplates/angular-spa
.NET 5.0 Angular 9 CLI Bootstrap App
________________
@DotNetZoom
🔰پروژه های ASP .NET Core + React
▪️https://github.com/bradymholt/aspnet-core-react-template
ASP.NET Core 3.1 / React SPA Template App
▪️https://github.com/NickMaev/react-core-boilerplate
Powerful ASP.NET Core 3 templates with React, true server-side rendering and Docker support
▪️https://github.com/CodAffection/React-CRUD-with-Asp.Net-Core-Web-API
Full Stack React js CRUD with Asp.Net Core Web
▪️https://github.com/microsoft/AspNetCore-React-WebApp
ASP.NET Core backend + React frontend + Entity Framework Core + automated testing
▪️https://github.com/based-ghost/aspnet-core-react-redux-playground-template
SPA template built with ASP.NET Core 5.0 + React + Redux + TypeScript + Hot Module Replacement (HMR)
▪️https://github.com/NetCoreTemplates/react-spa
.NET 5.0 React Create App CLI Bootstrap App
🔰پروژه های ASP .NET Core + Vue
▪️https://github.com/TrilonIO/aspnetcore-Vue-starter
Asp.net Core & Vue.js (ES6) SPA Starter kit - Vuex, webpack, Web API, Docker, and more!
▪️https://github.com/SoftwareAteliers/asp-net-core-vue-starter
ASP.NET Core + Vue.js starter project
▪️https://github.com/danijelh/aspnetcore-vue-typenoscript-template
Template AspNetCore with Vue, Vue router, Vuex, TypeScript, Bulma, Sass and Jest
▪️https://github.com/NetCoreTemplates/vue-spa
.NET 5.0 Vue CLI Bootstrap App
▪️https://github.com/damienbod/AspNetCoreMvcVueJs
ASP.NET Core with Vue.js
▪️https://github.com/based-ghost/aspnet-core-vue-vuex-playground-template
SPA template built with ASP.NET Core 5.0 + Vue + Vuex + TypeScript + Hot Module Replacement (HMR)
🔰پروژه های ASP .NET Core + Angular
▪️https://github.com/TrilonIO/aspnetcore-angular-universal
ASP.NET Core & Angular Universal advanced starter - PWA w/ server-side rendering for SEO, Bootstrap, i18n internationalization, TypeScript, unit testing, WebAPI REST setup, SignalR, Swagger docs, and more!
▪️https://github.com/emonney/QuickApp
ASP.NET Core 3.1 / Angular 9 startup project template with complete login, user and role management. Plus other useful services for Quick Application Development
▪️https://github.com/FabianGosebrink/ASPNETCore-Angular-Ngrx
An ASP.NET Core WebAPI Demo with an Angular Client using Ngrx store and effects and Signalr
▪️https://github.com/jasontaylordev/SecureSpa
ASP.NET Core 3 + Angular 8 + ASP.NET Identity generated using .NET Core SDK
▪️https://github.com/DanWahlin/AngularCLI-ASPNET-Core-CustomersService
Example of integrating Angular with ASP.NET Core RESTful Services
▪️https://github.com/NetCoreTemplates/angular-spa
.NET 5.0 Angular 9 CLI Bootstrap App
________________
@DotNetZoom
GitHub
GitHub - bradymholt/aspnet-core-react-template: ASP.NET Core 3.1 / React SPA Template App
ASP.NET Core 3.1 / React SPA Template App. Contribute to bradymholt/aspnet-core-react-template development by creating an account on GitHub.
🔰دنبال یه برنامه Monitoring ساده واسه ویندوز میگشتم که رایگان هم باشه
این 2تا رو پیدا کردم خیلی خوب بودن گفتم معرفی کنم شاید به کارتون اومد
سرعت و میزان Download و Upload در روز/هفته/ماه/سال - میزان مصرف و دمای CPU - فضای استفاده شده و آزاد RAM و ... رو نشونتون میده
🔹اولی SidebarDiagnostics هست که حاشیه کنار صفحه نشون میده. از قسمت Release ریپو هم میتونین فایل نصبیشو دانلود کنین
🔸دومی TrafficMonitor هست که امکاناتش کمتره ولی مینیمال تره و تحت یه Toolbar نشون میده (عکس دومی). از قسمت Release ریپو هم میتونین فایل اجراییشو دانلود کنین.
بازم از این ابزار های کار راه بنداز معرفی کنم؟ :)
__________________
@DotNetZoom
این 2تا رو پیدا کردم خیلی خوب بودن گفتم معرفی کنم شاید به کارتون اومد
سرعت و میزان Download و Upload در روز/هفته/ماه/سال - میزان مصرف و دمای CPU - فضای استفاده شده و آزاد RAM و ... رو نشونتون میده
🔹اولی SidebarDiagnostics هست که حاشیه کنار صفحه نشون میده. از قسمت Release ریپو هم میتونین فایل نصبیشو دانلود کنین
🔸دومی TrafficMonitor هست که امکاناتش کمتره ولی مینیمال تره و تحت یه Toolbar نشون میده (عکس دومی). از قسمت Release ریپو هم میتونین فایل اجراییشو دانلود کنین.
بازم از این ابزار های کار راه بنداز معرفی کنم؟ :)
__________________
@DotNetZoom
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ ساخت برنامه های gRPC بدون فایل های proto. در ASP.NET Core
🔰برای ساخت برنامه های gRPC در دات نت، 2 پیاده سازی متفاوت (یکی رسمی و دیگری غیر رسمی) وجود دارد
1️⃣ پیاده سازی grpc-dotnet (یا gRPC for .NET) که کتابخانه رسمی gRPC برای دات نت است
https://github.com/grpc/grpc-dotnet
2️⃣ پیاده سازی protobuf-net.Grpc که کتابخانه غیر رسمی و از توسط Marc Gravell (یکی از برنامه نویسان بزرگ سایت Stackoverflow، و نویسنده کتابخانه های محبوب Dapper و StackExchange.Redis) تهیه شده است
https://github.com/protobuf-net/protobuf-net.Grpc
🔸یکی از تفاوت های این دو کتابخانه این است که در حالت عادی (توسط grpc-dotnet) ساخت فایل های .proto جهت تعریف ساختار API الزامی است ولی توسط کتابخانه protobuf-net.Grpc نیازی به فایل های اضافی .proto نبوده و ساختار متد های سرویس دهنده توسط Interface ها مشخص می شوند.
🔹تفاوت دیگر آن این است که کتابخانه protobuf-net.Grpc تارگت های NETFramework 4.6.1. و NETStandard 2.0. و NETStandard 2.1. را پشتیبانی میکند در حالی که کتابخانه grpc-dotnet فقط NETStandard 2.1. را پشتیبانی میکند در نتیجه بر روی .NET Framework و .NET Core نسخه های قبل از 3.0 قابل اجرا نیست
- البته یک پیاده سازی رسمی دیگر (به نام gRPC for C#) نیز وجود دارد که از نسخه های قدیمی تر مانند NETFramework 4.5. و NETStandard 1.5. و NETStandard 2.0. هم پشتیبانی میکند
https://github.com/grpc/grpc/tree/master/src/csharp
🔸نکته بعدی، تفاوت در سرعت این دو کتابخانه است به صورتی که طبق بنچمارک زیر protobuf-net.Grp کمی کند تر از grpc-dotnet است
https://pawelkmiec.net/2019/11/17/gRPC-performance-benchmark.html
🔹تفاوت بعد آن این است که API های کتابخانه رسمی grpc-dotnet و #gRPC for C شبیه پیاده سازی اصلی grpc گوگل بوده در حالی که کتابخانه protobuf- net.Grpc بیشتر متمایل به Contract های سی شارپی بوده و کار با آن برای برنامه نویسان سی شارپ ساده تر و باب میل تر است
🔰 مشابه قضیه بالا، برای استفاده از protobuf در دات نت نیز 2 کتابخانه وجود دارد
1️⃣ کتابخانه Google.Protobuf : که پیاده سازی و استفاده از آن شبیه نسخه اصلی protobuf است. (ریپازیتوری گیتهاب)
2️⃣ کتابخانه protobuf-net : که پیاده سازی و استفاده از آن شبیه بقیه سریالایزرهای دات نتی بوده و بیشتر متمایل به سی شارپ است. (ریپازیتوری گیتهاب)
کتابخانه دومی بیشتر باب میل سی شارپیها بوده و نیز ساده تر است. با دیدن مثال هر دو کتابخانه میتوانید بهتر متوجه این تفاوت شوید.
لینک زیر هم به مقایسه این دو کتابخانه پرداخته :
How to choose between protobuf-csharp-port and protobuf-net
✅ آموزش استفاده از protobuf-net.Grpc
✔️Getting Started with protobuf-net.Grpc
✔️Mark Gravell Talking Between Services with gRPC and Other Tricks
✅ آموزش استفاده از grpc-dotnet و #gRPC for C
✔️Introduction to gRPC on .NET Core
✔️gRPC services with C#
✔️gRPC services with ASP.NET Core
✔️Call gRPC services with the .NET client
✔️Create a gRPC client and server in ASP.NET Core
✔️Trying out gRPC in ASP.NET Core 3
__________________
@DotNetZoom
🔰برای ساخت برنامه های gRPC در دات نت، 2 پیاده سازی متفاوت (یکی رسمی و دیگری غیر رسمی) وجود دارد
1️⃣ پیاده سازی grpc-dotnet (یا gRPC for .NET) که کتابخانه رسمی gRPC برای دات نت است
https://github.com/grpc/grpc-dotnet
2️⃣ پیاده سازی protobuf-net.Grpc که کتابخانه غیر رسمی و از توسط Marc Gravell (یکی از برنامه نویسان بزرگ سایت Stackoverflow، و نویسنده کتابخانه های محبوب Dapper و StackExchange.Redis) تهیه شده است
https://github.com/protobuf-net/protobuf-net.Grpc
🔸یکی از تفاوت های این دو کتابخانه این است که در حالت عادی (توسط grpc-dotnet) ساخت فایل های .proto جهت تعریف ساختار API الزامی است ولی توسط کتابخانه protobuf-net.Grpc نیازی به فایل های اضافی .proto نبوده و ساختار متد های سرویس دهنده توسط Interface ها مشخص می شوند.
🔹تفاوت دیگر آن این است که کتابخانه protobuf-net.Grpc تارگت های NETFramework 4.6.1. و NETStandard 2.0. و NETStandard 2.1. را پشتیبانی میکند در حالی که کتابخانه grpc-dotnet فقط NETStandard 2.1. را پشتیبانی میکند در نتیجه بر روی .NET Framework و .NET Core نسخه های قبل از 3.0 قابل اجرا نیست
- البته یک پیاده سازی رسمی دیگر (به نام gRPC for C#) نیز وجود دارد که از نسخه های قدیمی تر مانند NETFramework 4.5. و NETStandard 1.5. و NETStandard 2.0. هم پشتیبانی میکند
https://github.com/grpc/grpc/tree/master/src/csharp
🔸نکته بعدی، تفاوت در سرعت این دو کتابخانه است به صورتی که طبق بنچمارک زیر protobuf-net.Grp کمی کند تر از grpc-dotnet است
https://pawelkmiec.net/2019/11/17/gRPC-performance-benchmark.html
🔹تفاوت بعد آن این است که API های کتابخانه رسمی grpc-dotnet و #gRPC for C شبیه پیاده سازی اصلی grpc گوگل بوده در حالی که کتابخانه protobuf- net.Grpc بیشتر متمایل به Contract های سی شارپی بوده و کار با آن برای برنامه نویسان سی شارپ ساده تر و باب میل تر است
🔰 مشابه قضیه بالا، برای استفاده از protobuf در دات نت نیز 2 کتابخانه وجود دارد
1️⃣ کتابخانه Google.Protobuf : که پیاده سازی و استفاده از آن شبیه نسخه اصلی protobuf است. (ریپازیتوری گیتهاب)
2️⃣ کتابخانه protobuf-net : که پیاده سازی و استفاده از آن شبیه بقیه سریالایزرهای دات نتی بوده و بیشتر متمایل به سی شارپ است. (ریپازیتوری گیتهاب)
کتابخانه دومی بیشتر باب میل سی شارپیها بوده و نیز ساده تر است. با دیدن مثال هر دو کتابخانه میتوانید بهتر متوجه این تفاوت شوید.
لینک زیر هم به مقایسه این دو کتابخانه پرداخته :
How to choose between protobuf-csharp-port and protobuf-net
✅ آموزش استفاده از protobuf-net.Grpc
✔️Getting Started with protobuf-net.Grpc
✔️Mark Gravell Talking Between Services with gRPC and Other Tricks
✅ آموزش استفاده از grpc-dotnet و #gRPC for C
✔️Introduction to gRPC on .NET Core
✔️gRPC services with C#
✔️gRPC services with ASP.NET Core
✔️Call gRPC services with the .NET client
✔️Create a gRPC client and server in ASP.NET Core
✔️Trying out gRPC in ASP.NET Core 3
__________________
@DotNetZoom
GitHub
GitHub - grpc/grpc-dotnet: gRPC for .NET
gRPC for .NET. Contribute to grpc/grpc-dotnet development by creating an account on GitHub.
Forwarded from کدهک
اصل CQS بیان میکند که یک متد یا باید وضعیت (State) را تغییر دهد یا باید مقداری را برگرداند. بر مبنای این اصل متدهایی که وضعیت را تغییر میدهند Command و متدهایی که مقداری را بر میگردانند Query خوانده میشوند.
اگر قرار باشد هنگام خواندن یک Value وضعیت آن یا وضعیت Value دیگر تغییر کند میتواند یک نا هماهنگی در سیستم ایجاد کند که در نهایت منجر به باگ یا خطا شود.
اصل CQS با تکنیک CQRS از نظر مفهومی شباهت زیادی دارد . در CQS ما متدهای درون یک کلاس را جدا می کنیم اما در CQRS ساختار برنامه را جدا می کنیم که در نهایت ممکن است تا جدا شدن دیتابیس ها هم پیش رود.
باید توجه کنید که CQS یک اصل یا Principle در برنامه نویسی به حساب می آید و CQRS یک الگوی معماری است.
اگر قرار باشد هنگام خواندن یک Value وضعیت آن یا وضعیت Value دیگر تغییر کند میتواند یک نا هماهنگی در سیستم ایجاد کند که در نهایت منجر به باگ یا خطا شود.
اصل CQS با تکنیک CQRS از نظر مفهومی شباهت زیادی دارد . در CQS ما متدهای درون یک کلاس را جدا می کنیم اما در CQRS ساختار برنامه را جدا می کنیم که در نهایت ممکن است تا جدا شدن دیتابیس ها هم پیش رود.
باید توجه کنید که CQS یک اصل یا Principle در برنامه نویسی به حساب می آید و CQRS یک الگوی معماری است.
حاصل 2تا نصفه روز و رفتن با RazorPages شده پیدا کردن 2تا باگ ساده و بدیهی (که توی فیلم میتونین ببینین)
همینطوری ادامه بدم باگ های بیشتری هم پیدا میکنم احتمالا
چون خیلی سادس احتمالا قبلا issue هاش تو گیتهاب زده شده ولی بازم چک میکنم و اگه نبود گزارش میدم
تازه اینها باگ های بدیهی و مُبرهن هستند. در مورد ضعف ها و ایراداتش هم کلی میتونم توضیح بدم که اینجا جاش نیست.
نظر خودم: RazorPages یه مقدار (نه خیلی) ساده تره نسبت به MVC و مادامی که به کمبود هاش برنخورین و نیاز پیدا نکنین میتونه گزینه خوبی باشه ولی یه مقدار که نیازمندی هاتون پیچیده میشه ایرادات و کمبود های ساختاریش خودشو نشون میده و دیگه باید با راه حل های Workaround ایی ردش کنین.
خلاصه که قبل از اینکه خواستین RazorPages رو واسه پروژه تون انتخاب کنین بیشتر تحقیق کنین
ریپازیتوری گیتهاب برای Reproduce:
https://github.com/mjebrahimi/RazorPages_Bugs
______________
@DotNetZoom
همینطوری ادامه بدم باگ های بیشتری هم پیدا میکنم احتمالا
چون خیلی سادس احتمالا قبلا issue هاش تو گیتهاب زده شده ولی بازم چک میکنم و اگه نبود گزارش میدم
تازه اینها باگ های بدیهی و مُبرهن هستند. در مورد ضعف ها و ایراداتش هم کلی میتونم توضیح بدم که اینجا جاش نیست.
نظر خودم: RazorPages یه مقدار (نه خیلی) ساده تره نسبت به MVC و مادامی که به کمبود هاش برنخورین و نیاز پیدا نکنین میتونه گزینه خوبی باشه ولی یه مقدار که نیازمندی هاتون پیچیده میشه ایرادات و کمبود های ساختاریش خودشو نشون میده و دیگه باید با راه حل های Workaround ایی ردش کنین.
خلاصه که قبل از اینکه خواستین RazorPages رو واسه پروژه تون انتخاب کنین بیشتر تحقیق کنین
ریپازیتوری گیتهاب برای Reproduce:
https://github.com/mjebrahimi/RazorPages_Bugs
______________
@DotNetZoom
DotNetZoom
حاصل 2تا نصفه روز و رفتن با RazorPages شده پیدا کردن 2تا باگ ساده و بدیهی (که توی فیلم میتونین ببینین) همینطوری ادامه بدم باگ های بیشتری هم پیدا میکنم احتمالا چون خیلی سادس احتمالا قبلا issue هاش تو گیتهاب زده شده ولی بازم چک میکنم و اگه نبود گزارش میدم تازه…
توضیحات تکمیلی:
مشکل دوم که مشخصا باگ هست و نیاز به توضیح نداره.
و اما توضیح علت اصلی مشکل اول (همون مورد TempData) یه مقدار طولانیه و اگه دقیق تر بخوایم بگیم اسمش رو نمیشه باگ گذاشت. این مشکل حتی توی مروگر FireFox رخ نمیده ولی توی Chrome و Edge رخ میده که دلیل منطقی خودش رو هم داره.
ریشه اصلی این مشکل بر میگرده به عملکرد پشت صحنه اتریبیوت [TempData] که باعث میشه این مشکل وجود بیاد.
خلاصه اش اینکه وقتی از Property به همراه اتریبیوت [TempData] استفاده میکنین. توی هر request مقدار TempData به صورت خودکار bind میشه به Property مربوطه (حتی اگه نخواین) و از اونجایی که مروگر های بر پایه کرومیوم مثل Chrome و Edge همراه با ریکوست به مسیر root سایت، یه ریکوئست دیگه هم به آدرس /favicon جهت پیدا کردن آیکون سایت میزنن این مشکل پیش میاد که request دومی باعث bind شدن خودکار مقدار TempData به Property مربوطه میشه که باعث "خوانده" شدن مقدار از TempData و درنتیجه حذف شدن مقدار اون میشه.
درواقع ما توی ریکوئست /favicon نیاز نداریم مقدار TempData خونده بشه ولی چون خودکار این کار رو برامون انجام میده باعث میشه مقدارش حذف بشه.
و این همون دلیلی هست که اگر از TempData["Message"] به جای اتریبیوت [TempData] استفاده کنیم این مشکل برامون پیش نمیاد. چون اون attribute دیگه وجود نداره که بخواد سرِخود اون مقدار رو read کنه
دستور Keep هم چون باعث میشه پس از خونده شدن سرِخود مقادیر، باز هم اونها رو نگه داره، میتونه این ایراد رو دور بزنه.
یه نکته دیگه اینه که توی MVC قدیم. طول عمر TempData فقط به اندازه "یک درخواست" دیگر بود یعنی توی درخواست اول مقدار رو ست میکردیم و توی درخواست دوم میتونستیم بخونیمش. حالا اگه نمیخوندیم هم مقدارش از دست میرفت و برای جلوگیری از این کار باید از Keep استفاده میکردیم
ولی توی MVC Core این طول عمر تغییر کرده و مادامی که مقدار از TempData "خوانده" نشه مقدارش حذف نمیشه. ولی به محض اینکه خوانده شد مقدارش حذف میشه. یعنی اگه توی 10 تا درخواست هم مقدار اون رو نخونید، باقی میمونه و حذف نمیشه
حالا با توجه به اینکه اتریبیوت [TempData] خودکار مقدار رو read میکنه. شما فقط توی "یک درخواست" بعدی میتونین مقدار رو استفاده کنین و اگرم استفاده نکردین، اون کاری به اینا نداره و حذفش میکنه. (و برای جلوگیری ازش هم باید از متد Keep استفاده کنین)
__________________
@DotNetZoom
مشکل دوم که مشخصا باگ هست و نیاز به توضیح نداره.
و اما توضیح علت اصلی مشکل اول (همون مورد TempData) یه مقدار طولانیه و اگه دقیق تر بخوایم بگیم اسمش رو نمیشه باگ گذاشت. این مشکل حتی توی مروگر FireFox رخ نمیده ولی توی Chrome و Edge رخ میده که دلیل منطقی خودش رو هم داره.
ریشه اصلی این مشکل بر میگرده به عملکرد پشت صحنه اتریبیوت [TempData] که باعث میشه این مشکل وجود بیاد.
خلاصه اش اینکه وقتی از Property به همراه اتریبیوت [TempData] استفاده میکنین. توی هر request مقدار TempData به صورت خودکار bind میشه به Property مربوطه (حتی اگه نخواین) و از اونجایی که مروگر های بر پایه کرومیوم مثل Chrome و Edge همراه با ریکوست به مسیر root سایت، یه ریکوئست دیگه هم به آدرس /favicon جهت پیدا کردن آیکون سایت میزنن این مشکل پیش میاد که request دومی باعث bind شدن خودکار مقدار TempData به Property مربوطه میشه که باعث "خوانده" شدن مقدار از TempData و درنتیجه حذف شدن مقدار اون میشه.
درواقع ما توی ریکوئست /favicon نیاز نداریم مقدار TempData خونده بشه ولی چون خودکار این کار رو برامون انجام میده باعث میشه مقدارش حذف بشه.
و این همون دلیلی هست که اگر از TempData["Message"] به جای اتریبیوت [TempData] استفاده کنیم این مشکل برامون پیش نمیاد. چون اون attribute دیگه وجود نداره که بخواد سرِخود اون مقدار رو read کنه
دستور Keep هم چون باعث میشه پس از خونده شدن سرِخود مقادیر، باز هم اونها رو نگه داره، میتونه این ایراد رو دور بزنه.
یه نکته دیگه اینه که توی MVC قدیم. طول عمر TempData فقط به اندازه "یک درخواست" دیگر بود یعنی توی درخواست اول مقدار رو ست میکردیم و توی درخواست دوم میتونستیم بخونیمش. حالا اگه نمیخوندیم هم مقدارش از دست میرفت و برای جلوگیری از این کار باید از Keep استفاده میکردیم
ولی توی MVC Core این طول عمر تغییر کرده و مادامی که مقدار از TempData "خوانده" نشه مقدارش حذف نمیشه. ولی به محض اینکه خوانده شد مقدارش حذف میشه. یعنی اگه توی 10 تا درخواست هم مقدار اون رو نخونید، باقی میمونه و حذف نمیشه
حالا با توجه به اینکه اتریبیوت [TempData] خودکار مقدار رو read میکنه. شما فقط توی "یک درخواست" بعدی میتونین مقدار رو استفاده کنین و اگرم استفاده نکردین، اون کاری به اینا نداره و حذفش میکنه. (و برای جلوگیری ازش هم باید از متد Keep استفاده کنین)
__________________
@DotNetZoom
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ ساخت دیتابیس یکبار مصرف Mongo بدون نیاز به نصب آن!
کتابخانه Mongo2Go یه کتابخونه عالی برای Integration Testing پروژه هایی هست که از MongoDb استفاده میکنند
🔶 توسط این کتابخونه می تونین دیتابیس های MongoDb رو بدون نیاز به نصب اون به صورت یکبار مصرف ایجاد کنین، یعنی یه دیتابیس موقت (توی پوشه Temp سیستم عامل) براتون میسازه و در آخر وقتی کارتون باهاش تموم شد اون رو حذف میکنه. در نتیجه برای Integration Testing بسیار مناسب و کاربردی هست.
🔷 قاعدتا برای استفاده از مونگو باید ورژن متناسب با سیستم عاملتون رو نصب و کانفیگ کنین یا راحت تر اینکه اون رو توسط Docker راه اندازی کنین ولی توسط این کتابخونه دیگه نیازی به نصب اون ندارین چون فایل های باینری MonogDb رو داخل خودش داره (واسه همین یه مقدار حجمش زیاده، 69 مگابایت)
🔰طرز کار باهاش خیلی سادس فقط کافیه ناگتش رو نصب کنین
https://github.com/Mongo2Go/Mongo2Go
_________________
@DotNetZoom
کتابخانه Mongo2Go یه کتابخونه عالی برای Integration Testing پروژه هایی هست که از MongoDb استفاده میکنند
🔶 توسط این کتابخونه می تونین دیتابیس های MongoDb رو بدون نیاز به نصب اون به صورت یکبار مصرف ایجاد کنین، یعنی یه دیتابیس موقت (توی پوشه Temp سیستم عامل) براتون میسازه و در آخر وقتی کارتون باهاش تموم شد اون رو حذف میکنه. در نتیجه برای Integration Testing بسیار مناسب و کاربردی هست.
🔷 قاعدتا برای استفاده از مونگو باید ورژن متناسب با سیستم عاملتون رو نصب و کانفیگ کنین یا راحت تر اینکه اون رو توسط Docker راه اندازی کنین ولی توسط این کتابخونه دیگه نیازی به نصب اون ندارین چون فایل های باینری MonogDb رو داخل خودش داره (واسه همین یه مقدار حجمش زیاده، 69 مگابایت)
🔰طرز کار باهاش خیلی سادس فقط کافیه ناگتش رو نصب کنین
Install-Package Mongo2Go
و به صورت زیر ازش استفاده کنینusing (var runner = MongoDbRunner.Start())ریپازیتوری گیتهاب :
{
var client = new MongoClient(runner.ConnectionString);
var database = client.GetDatabase("IntegrationTest");
var collection = database.GetCollection<TestDocument>("TestCollection");
//Just use it!
}
https://github.com/Mongo2Go/Mongo2Go
_________________
@DotNetZoom
GitHub
GitHub - Mongo2Go/Mongo2Go: Mongo2Go - MongoDB for .NET integration tests
Mongo2Go - MongoDB for .NET integration tests. Contribute to Mongo2Go/Mongo2Go development by creating an account on GitHub.
Forwarded from کدهک
freetalk
فری تاک
🔰گپ و گفت خودمونی و فان
توی این قسمت از #فری_تاک، من و حکیم و معین یه گپ و گفت خودنی و فان داریم
از سوتی هامون توی برنامه نویسی میگیم و ضرر هایی که بالا آوردیم
از تجربه های شکست و موفقیت هامون حرف میزنیم و...
و میگیم و میخندیم و شوخی میکنیم
این قسمت اولین قسمت از این سبک جدید هست که گپ و گفت های خودمونی و فان داریم.
گوش که دادین حتما فیدبک بدین که اگه دوس داشتین بیشتر از اینا بذاریم.
همیشه قرار نیس بحث فنی بکنیم، یه وقتایی هم لازمه بگیم و بخندیم و حال دلمون رو خوب کنیم. (این وسط یه تجربیاتی هم رد و بدل میکنیم)
خوش باشین :)
_________________
@DotNetZoom
توی این قسمت از #فری_تاک، من و حکیم و معین یه گپ و گفت خودنی و فان داریم
از سوتی هامون توی برنامه نویسی میگیم و ضرر هایی که بالا آوردیم
از تجربه های شکست و موفقیت هامون حرف میزنیم و...
و میگیم و میخندیم و شوخی میکنیم
این قسمت اولین قسمت از این سبک جدید هست که گپ و گفت های خودمونی و فان داریم.
گوش که دادین حتما فیدبک بدین که اگه دوس داشتین بیشتر از اینا بذاریم.
همیشه قرار نیس بحث فنی بکنیم، یه وقتایی هم لازمه بگیم و بخندیم و حال دلمون رو خوب کنیم. (این وسط یه تجربیاتی هم رد و بدل میکنیم)
خوش باشین :)
_________________
@DotNetZoom
🔰گپ و گفت خودمونی و فان
توی این قسمت از #فری_تاک، من و حکیم و معین یه گپ و گفت خودنی و فان داریم
از سوتی هامون توی برنامه نویسی میگیم و ضرر هایی که بالا آوردیم
از تجربه های شکست و موفقیت هامون حرف میزنیم و...
و میگیم و میخندیم و شوخی میکنیم
این قسمت اولین قسمت از این سبک جدید هست که گپ و گفت های خودمونی و فان داریم.
گوش که دادین حتما فیدبک بدین که اگه دوس داشتین بیشتر از اینا بذاریم.
همیشه قرار نیس بحث فنی بکنیم، یه وقتایی هم لازمه بگیم و بخندیم و حال دلمون رو خوب کنیم. (این وسط یه تجربیاتی هم رد و بدل میکنیم)
خوش باشین :)
لینک ویس ضبط شده:
https://news.1rj.ru/str/DotNetZoom/1236
_________________
@DotNetZoom
توی این قسمت از #فری_تاک، من و حکیم و معین یه گپ و گفت خودنی و فان داریم
از سوتی هامون توی برنامه نویسی میگیم و ضرر هایی که بالا آوردیم
از تجربه های شکست و موفقیت هامون حرف میزنیم و...
و میگیم و میخندیم و شوخی میکنیم
این قسمت اولین قسمت از این سبک جدید هست که گپ و گفت های خودمونی و فان داریم.
گوش که دادین حتما فیدبک بدین که اگه دوس داشتین بیشتر از اینا بذاریم.
همیشه قرار نیس بحث فنی بکنیم، یه وقتایی هم لازمه بگیم و بخندیم و حال دلمون رو خوب کنیم. (این وسط یه تجربیاتی هم رد و بدل میکنیم)
خوش باشین :)
لینک ویس ضبط شده:
https://news.1rj.ru/str/DotNetZoom/1236
_________________
@DotNetZoom
Forwarded from کدهک
✅ آموزش Unit Testing با استفاده از NUnit و Moq بخش دوم: Mocking
در زمینه Unit Testing گاهی اوقات یک Unit یا کلاس وابستگی هایی دارد که مورد بررسی برای تست نیستند. همچنین Unit مورد نظر بدون داشتن این وابستگی ها نمیتواند کار کند. یکی از راه های حل این مشکل، شبیه سازی وابستگی های Unit یا کلاس است که به Mocking معروف می باشد. یکی از کتابخانه های بسیار کاربردی و معروف در زمینه Mocking ، کتابخانه Moq می باشد که در این مقاله قصد داریم به بررسی آن بپردازیم
#بابک_طارمی
https://vrgl.ir/BnMoW
_____________
@DotNetZoom
در زمینه Unit Testing گاهی اوقات یک Unit یا کلاس وابستگی هایی دارد که مورد بررسی برای تست نیستند. همچنین Unit مورد نظر بدون داشتن این وابستگی ها نمیتواند کار کند. یکی از راه های حل این مشکل، شبیه سازی وابستگی های Unit یا کلاس است که به Mocking معروف می باشد. یکی از کتابخانه های بسیار کاربردی و معروف در زمینه Mocking ، کتابخانه Moq می باشد که در این مقاله قصد داریم به بررسی آن بپردازیم
#بابک_طارمی
https://vrgl.ir/BnMoW
_____________
@DotNetZoom
ویرگول
آموزش Unit Testing با استفاده از NUnit و Moq بخش دوم: Mocking
در این مقاله قصد داریم که به Mocking و کتابخانه محبوب Moq بپردازیم