شروع به کار با DNTFrameworkCore - قسمت 5 - مکانیزم Eventing و استفاده از سرویسهای موجودیتها
نویسنده: سالار ربال
تاریخ: ۱۳۹۷/۱۲/۱۲ ۰:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
PM> Install-Package DNTFrameworkCore
public class TaskEditingBusinessEventHandler : BusinessEventHandler<EditingBusinessEvent<TaskModel, int>>
{
private readonly ILogger<TaskEditingBusinessEventHandler> _logger;
public TaskEditingBusinessEventHandler(ILogger<TaskEditingBusinessEventHandler> logger)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public override Task<Result> Handle(EditingBusinessEvent<TaskModel, int> @event)
{
foreach (var model in @event.Models)
{
_logger.LogInformation($"Title changed from: {model.OriginalValue.Title} to: {model.NewValue.Title}");
}
return Task.FromResult(Ok());
}
} کار با پیادهسازی واسط جنریک IBusinessEventHandler یا ارثبری از کلاس جنریک BusinessEventHandler آغاز میشود؛ سپس نیاز است Type Parameter متناظر را نیز مشخص کنیم. برای این منظور در تکه کد بالا از رخداد جنریک EditingBusinessEvent استفاده شده است. همچنین همانطور که ملاحظه میکنید، نیاز است نوع Model مورد نظر نیز مشخص شده باشد؛ در اینجا از TaskModel به عنوان Model/DTO عملیات CUD موجودیت Task استفاده شده است.
رخدادهای Creating/Created/Deleting/Deleted دارای خصوصیتی بنام Models هستند که نوع آن IEnumerable<TModel> میباشد. ولی این خصوصیت در رخدادهای Editing/Edited از نوع IEnumerable<ModifiedModel<TModel>> میباشد؛ در این صورت به مقادیر موجود در بانک اطلاعاتی و همچنین مقادیری که توسط استفاده کننده از سرویس جاری به عنوان آرگومان به متد ویرایش ارسال شده است، دسترسی خواهیم داشت.
public class ModifiedModel<TValue>
{
public TValue NewValue { get; set; }
public TValue OriginalValue { get; set; }
} OOP : Everything is an object CRUD-based thinking : Everything is CRUD
public class ItemCategoryCreatedBusinessEventHandler : IBusinessEventHandler<CreatedBusinessEvent<ItemCategoryModel, int>>
{
private readonly ISaleMethodService _saleMethodService;
public TaskEditingBusinessEventHandler(ISaleMethodService saleMethodService)
{
_saleMethodService = saleMethodService ?? throw new ArgumentNullException(nameof(saleMethodService));
}
public override Task<Result> Handle(CreatedBusinessEvent<ItemCategoryModel, int> @event)
{
var methods = _saleMethodService.FindAsnc();
foreach (var method in methods)
{
foreach (var model in @event.Models)
{
method.ItemCategories.Add(new SaleMethodItemCategoryModel
{
ItemCategoryId = model.Id,
TrackingState = TrackingState.Added;
});
}
}
return _saleMethodService.EditAsync(methods);
}