استفاده از litebus برای پروژه از marvin جای mediateR استفاده کنیم از Mapperly به جای auto mapper پکیج brighter هم خیلی خوبه
خوب داره میگه که از Command برای CQRS استفاده میشه و با استفاده از DI این کار انجام میشه و وقتی که T هم میزاریم دیگه میتونیم درخواستمون از هر نوعی باشه input و out put میتونه باشه
این تعریف بهتری داده :
این کلاس هستش که میاد منطق درست کردن کلاس user رو hangle میکنه ، ورودی میاد Create User Command رو میگیره و بعد خروجی User میده
دقیقا همین داستان ها رو هم برای query داریم
https://code-maze.com/cqrs-mediatr-fluentvalidation/
خوب برای استفاده از mediatR میایم و از اینترفیس IRequest استفاده میکنیم که هم command و هم query رو داره انجام میده
برای استفاده ازش میایم و دو تا abstraction جدا ازش میسازیم
خوب بعد میایم TRespose رو از نوع generic type رو تعریف میکنیم و بعد از out استفاده میکنیم
بعد میایم دو تا abstraction جدا هم برای handlers ها تعریف میکنیم
خوب چرا میایم این interface ها رو تعیین میکنیم آیا اینترفیس های mediatR به اندازه کافی خوب نیست >؟ با درست کردن این abstraction ها ما انعطاف بیشتری داریم برای تغییر و اضافه کردن قابلیت های جدید
اینجا تعریفی که کرده اینه که ما میخوایم تمامی command ها idempotent باشند یعنی فقط یک بار اجرا بشه
خوب ما میتونیم ICommand inteface رو extent کنیم و یه IIdempotent Command Interface رو درست کنیم
https://code-maze.com/cqrs-mediatr-fluentvalidation/
خوب توی کد بالا میاد یه اینترفیس درست میکنه که خوده اون میاد و از اینترفیس mediatR ارث بری کرده و بعد گفته که TCommand باید بیاد و ICommand TResponse رو پیاده سازی کنه
خوب اینجا اول اومده از IRequest TResponse ارث بری کرده که یعنی میخواد اون رو extend کنه و ICommand داره میگه که خروجی هم از نوع TResponse هستش
بعد اومده از همین اینترفیسی که درست کردیم و قراره custumize اش کنیم در خط پایین استفاده کرده اومده از این اینترفیس برای یک کلاس abstract استفاده کرده و همین به ما این قابلیت رو میده که برای پیاده سازی Command و استفاده از logic اش در جاهای دیگه ازش استفاده کنیم
https://medium.com/@90mandalchandan/cqrs-architecture-how-it-works-5f18a36886ea
https://codewithmukesh.com/blog/cqrs-and-mediatr-in-aspnet-core/
Registering MediatR
As we have already installed the required package to our application, let’s register MediatR handlers to the application’s DI Container. Open up Program.cs
file.
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));
خوب اینجا یه سری قابلیت جدید اضافه شده : https://learn.microsoft.com/en-us/ef/core/modeling/relationships/many-to-many
error : Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly ‘System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’.
اونجا باید 64 win-X رو بنویسیم ارور حل میشه