پروژه SmartLockPlatform - مدیریت قفل‌های هوشمند و کنترل دسترسی
200, OK
https://github.com/rabbal/SmartLockPlatform_Lab icon

این پروژه با هدف آشنایی با دامین مربوط به قفل‌های هوشمند و کنترل دسترسی به آنها انجام شده است. در سورس کد آن نحوه استفاده از امکانات Resource-based Authorization و Logical CQRS در کنار طراحی یک Rich Domain را می توانید مشاهده کنید. همچنین روش برقراری ارتباط با این قفل‌ها از طریق پروتکل MQTT با استفاده از Emqx در آن تعبیه شده است.

پروژه SmartLockPlatform - مدیریت قفل‌های هوشمند و کنترل دسترسی
قسمت هشتم - بررسی کامل CQRS,CQS, Mediator Pattern, MediatR
303, SeeOther
https://youtu.be/ePocOdXTi0U icon

قسمت هشتم - تو این ویدیو به طور کامل مباحث CQRS,CQS, Mediator Pattern, MediatR رو بررسی کردیم و یه کدی که قبلا نوشته بودیم رو ریفکتور کردیم.  


02:00 CQS Concept 03:52 CQRS 

09:38 Materialized View Pattern 

12:00 CQRS Implementation without MediatR 

17:24 Mediator Pattern 

19:45 CQRS Implementation with MediatR Package 

مدت ویدیو : 35 دقیقه 

قسمت هشتم - بررسی کامل CQRS,CQS, Mediator Pattern, MediatR
پیاده سازی معماری کلین و الگوی CQRS
303, SeeOther
https://youtu.be/npTJDNsEK4Q icon

در این قسمت معماری کلین رو پیاده سازی کردیم و الگوی CQRS رو هم در کنارش پیاده سازی کردیم.

06:00 Domain Layer 

07:00 Application Layer 

08:37 Infrastructure/Persistence Layer 

11:00 Presentation Lauer 

12:20 Inside of Domain Layer ( enums, value objects, exceptions, entities) 

18:00 Inside of Application Layer (CQRS, MediatR, Command, and Query Handler) 

26:00 Inside of Infrastructure ( Adapter, EF Core) 

29:00 Query and Command Bus 

37:00 Fluent Validation 

41:00 Behaviour Pipeline 

پیاده سازی معماری کلین و الگوی CQRS
دوره 9 ساعته Clean Architecture + CQRS
200, OK
https://www.youtube.com/watch?v=NzcZcim9tp8 icon

Mini Course #1 Clean Architecture + CQRS - YouTube

00:00:00 - Intro
00:01:10 - Why do we record this course?
00:04:39 - Layered architecture: Why I don't like it anymore?
00:27:27 - Clean architecture
00:38:16 - Course prerequisites (still can't pronounce it correctly)
00:42:30 - What do we build?
00:45:18 - *Domain Layer*
00:49:57 - Entity
01:00:20 - Primitive obsession code smell
01:03:20 - Value Object
01:10:54 - Custom exceptions
01:33:25 - Domain model validation
01:38:55 - Aggregate
01:50:50 - Domain event
02:14:30 - Factory
02:28:50 - Policy
02:43:50 - Repository
02:48:55 - Domain Layer: Summary
02:56:45 - CQS: Command Query Separation
03:07:46 - CQRS: Command Query Responsibility Segregation
03:29:48 - *Application Layer*
03:30:25 - Command/Command Handler/Command Dispatcher definitions
03:40:45 - Automatic command handlers registration
03:44:12 - Application & Domain registration
03:50:52 - Command
03:55:31 - Command Handler
04:01:11 - Where to put methods related to reading?
04:07:00 - Read Service
04:14:14 - Weather Service
04:28:25 - Overview of the other commands & command handlers
04:34:35 - Query/Query Handler/Query Dispatcher definitions
04:44:37 - Automatic query handlers registration (BONUS: example of copy/paste pattern)
04:52:50 - How to tackle reading on Query side?
05:06:30 - *Infrastructure Layer*
05:07:56 - Configuration of Entity Framework Core
05:15:15 - Read Models
05:19:05 - ReadDbContext & WriteDbContext
05:24:13 - EF Entity Configuration
05:42:37 - DbContexts registration
05:55:51 - Query Handlers
06:12:18 - Repository implementation on top of EF Core
06:16:45 - Read Service implementation on top of EF Core
06:19:00 - Dummy Weather Service implementation
06:23:20 - EF Migration
06:29:50 - Applying EF migrations automatically
06:39:38 - *Presentation Layer*
06:41:35 - Controller
06:50:43 - How to return ID of resource in CQRS approach?
07:00:02 - Testing API
07:09:29 - *Cross Cutting Concerns*
07:09:30 - Error Handling
07:20:49 - Logging
07:34:57 - *Unit Testing*
07:42:34 - Unit Test on Domain Layer
08:09:45 - Unit Test on Application Layer
08:34:00 - Summary 

دوره 9 ساعته Clean Architecture + CQRS
توسعه یک معماری تمیز با الگو CQRS با استفاده از ASP.NET Core ,EF , Dapper
200, OK
https://mahedee.net/playing-with-clean-architecture-and-cqrs-pattern-using-asp.net-core-ef-and-dapper/ icon

اگر بدنبال استفاده کردن از تکنولوژی های Ef core  و Dapper  با الگو CQRS  در پروژه های ASP.NET Core  هستید این مقاله به شما کمک خواهد کرد.

توسعه یک معماری تمیز با الگو CQRS با استفاده از ASP.NET Core  ,EF , Dapper
FastEndpoints؛ جایگزینی دیگر برای Minimal APIs در دات نت 6
308, PermanentRedirect
https://fast-endpoints.com/index.html icon

FastEndpoints offers a more elegant solution than the Minimal APIs and MVC Controllers with the goal of increasing developer productivity. Performance is on par with the Minimal APIs and is faster; uses less memory; and outperforms a MVC Controller by about 34k requests per second on a Ryzen 3700X desktop. 

FastEndpoints؛ جایگزینی دیگر برای Minimal APIs در دات نت 6
کاربرد EventBus و معرفی پکیج NeoBus
200, OK
https://virgool.io/@ahmadpooromid/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-eventbus-%D9%88-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%BE%DA%A9%DB%8C%D8%AC-neobus-rveoqqgefbmu icon

در این مطلب به معرفی و کاربرد EventBus پرداخته می‌شود.

هم چنین یک EventBus جهت استفاده تو پروژه‌های دات نتی معرفی و نحوه کار آن شرح داده می‌شود.

در واقع این EventBus یک نوگت پکیج هست که شما براحتی میتونید اونو تو پروژه‌های خودتون استفاده کنید.

کاربرد EventBus و معرفی پکیج NeoBus
مفهوم و پیاده سازی Scalability در CQRS
200, OK
https://github.com/omid-ahmadpour/CleanArchitecture-Template icon

اگر به مبحث CQRS علاقمند هستید و میخواهید بطور کامل و درست اونو تو پروژه‌های خودتون پیاده سازی کنید و از پرفرمنس اپلیکیشن خود راضی باشید، ریپازیتوری ای را که معرفی می‌کنم، دنبال کنید.

یکی از مزایای CQRS ، Scalability است. بدون Scale کردن ، کل اپلیکیشن ما درون یک سرور قرار دارد و تنها به منابع یک سرور محدود می‌شود. با گذشت زمان و رشد اپلیکیشن منابع بیشتری مورد نیاز خواهد بود و باید این سرور را قوی‌تر کنیم که این ماجرا هزینه بر است.

چونکه عملیات خواندن بیشتر از نوشتن، آپدیت و حذف اطلاعات درخواست می‌شود درنتیجه بار بیشتری روی کوری‌های اپلیکیشن هست ، پس جداسازی دیتابیس‌های Query و Command می‌تواند تاثیر چشمگیری در سرعت و کارایی اپلیکیشن شما داشته باشد.

بدین ترتیب می‌توانیم برای عملیات Read ، سرور را قویتر و برای باقی عملیات از سرورهای ضعیف‌تر استفاده کنیم و این چیزی است که توسط Scalability فراهم می‌شود.

در این پروژه کانتکست‌ها و ریپازیتوری‌های خواندن و نوشتن جدا شده است و به این ترتیب میتونید در Query ‌ها از کانتکست یا ریپازیتوری خواندن و در Command ‌ها از کانتکست یا ریپازیتوری نوشتن استفاده کنید.

یک راه برای جداسازی دیتابیس‌های خواندن و نوشتن استفاده از تکنیک Always On اسکول سرور است که بعد از پیاده سازی آن، شما می‌توانید کانکشن استرینگ‌های دیتابیس‌های خود را در فایل appsettings.json قرار داده و دیتابیس Command و Query اپلیکیشن خود را بدین ترتیب جدا سازی نمایید.

راه حل دیگر می‌تواند این باشد که در پیاده سازی ریپازیتوری خواندن خود از  Dapper  برای کوری گرفتن استفاده کنید که کارایی و سرعت آن در مواردی به مراتب بیشتر از ef است.

یک راه بهتر می تواند طراحی دیتابیسی باشد که جداول Denormal و  Flat داشته باشد که تمام فیلدهای مورد نیاز درون آن قرارگیرد. سپس با هر بار درج اطلاعات در دیتابیس Command این جداول نیر آپدیت شوند. با داشتن این جداول دیگر نیاز به Join های عجیب و غریب  SQL  نداریم.

بسته به بیزینس مورد نظر و منابع موجود می‌توانید از تکنیک ها، ابزارها و دیتابیس‌های دیگری هم در پیاده سازی‌های خود استفاده کنید.

مفهوم و پیاده سازی Scalability در CQRS