برنامه نویسی

به‌روزرسانی ستون‌های حسابرسی در ریشه‌های مجموع و نهادهای فرزند با EF Core و DDD

Summarize this content to 400 words in Persian Lang

معرفی

در برنامه های کاربردی سازمانی، ردیابی ایجاد و اصلاح داده ها برای حسابرسی و پاسخگویی بسیار مهم است. این اغلب با استفاده از ستون های ممیزی مانند CreatedOn، CreatedBy، UpdatedOn و UpdatedBy اجرا می شود. در سیستمی که از اصول طراحی دامنه محور (DDD) پیروی می‌کند، مدیریت این ستون‌های حسابرسی در ریشه‌های مجموع و نهادهای فرزندشان می‌تواند کمی چالش برانگیز باشد. این پست وبلاگ شما را از طریق یک رویکرد عملی برای به روز رسانی این ستون های حسابرسی با استفاده از Entity Framework Core راهنمایی می کند.

شناخت دامنه و موجودیت ها

در DDD، یک ریشه جمع، موجودیت اصلی در گروهی از موجودیت های مرتبط است که از ثبات و یکپارچگی کل مجموعه اطمینان می دهد. برای مثال ما، فرض می‌کنیم که همه نهادهایی که رابط IAuditedEntity را پیاده‌سازی می‌کنند، باید ستون‌های حسابرسی خود را به‌روزرسانی کنند.

public interface IAuditedEntity{DateTime CreatedOn { get; set; }string CreatedBy { get; set; }DateTime UpdatedOn { get; set; }string UpdatedBy { get; set; }}نهادهایی که این رابط را پیاده سازی می کنند، هر زمان که تغییرات ایجاد شود، ویژگی های حسابرسی آنها تنظیم می شود.

نادیده گرفتن روش SaveChangesAsync

برای تنظیم خودکار ستون‌های ممیزی، می‌توانیم متد SaveChangesAsync را در DbContext خود لغو کنیم. این روش عملیات ذخیره را قطع می کند و به ما اجازه می دهد تا قبل از اینکه تغییرات به پایگاه داده متعهد شوند، ستون های ممیزی را تنظیم کنیم.

public override Task SaveChangesAsync(CancellationToken cancellationToken = default){SetAuditColumns();return base.SaveChangesAsync(cancellationToken);}

پیاده سازی روش SetAuditColumns

روش SetAuditColumns بر روی تمام نهادهای ردیابی شده تکرار می شود و ویژگی های حسابرسی را بر اساس وضعیت آنها (افزوده یا اصلاح شده) تنظیم می کند. این تضمین می کند که هر بار که یک نهاد اضافه یا به روز می شود، ستون های حسابرسی مطابق با آن پر می شوند.

private void SetAuditColumns(){foreach (var item in ChangeTracker.Entries().Where(e => e.Entity is IAuditedEntity)){var entity = item.Entity as IAuditedEntity;switch (item.State){case EntityState.Added:entity.CreatedOn = DateTime.UtcNow;entity.UpdatedOn = DateTime.UtcNow;entity.CreatedBy = string.IsNullOrEmpty(this.requestContext.Email) ? “System” : this.requestContext.Email;entity.UpdatedBy = string.IsNullOrEmpty(this.requestContext.Email) ? “System” : this.requestContext.Email;break;case EntityState.Modified:entity.UpdatedOn = DateTime.UtcNow;entity.UpdatedBy = string.IsNullOrEmpty(this.requestContext.Email) ? “System” : this.requestContext.Email;break;}}}اطلاعات بیشتر در مورد RequestContext:

requestContext سرویسی است که در مرحله قبلی در خط لوله درخواست برنامه پر شده است. معمولاً اطلاعات مربوط به کاربر که درخواست را آغاز کرده است، مانند آدرس ایمیل آنها و سایر داده های مرتبط استخراج می کند. سپس این زمینه به DbContext تزریق می‌شود و به آن اجازه می‌دهد تا هر جا که لازم باشد، از جمله در منطق ستون حسابرسی ما، مصرف شود.

public class RequestContext{public string Email { get; set; }// Other properties like UserId, UserName, etc.}

نتیجه

خودکارسازی جمعیت ستون های حسابرسی در نهادهای شما یک جنبه حیاتی برای حفظ یکپارچگی داده ها و پاسخگویی است. با استفاده از اصول ChangeTracker و DDD EF Core، می‌توانید این ویژگی‌ها را در ریشه‌های مجموع و موجودیت‌های فرزندتان به طور موثر مدیریت کنید. این رویکرد نه تنها کد دیگ بخار را کاهش می دهد، بلکه ثبات و دقت در داده های حسابرسی شما را تضمین می کند.

معرفی

در برنامه های کاربردی سازمانی، ردیابی ایجاد و اصلاح داده ها برای حسابرسی و پاسخگویی بسیار مهم است. این اغلب با استفاده از ستون های ممیزی مانند CreatedOn، CreatedBy، UpdatedOn و UpdatedBy اجرا می شود. در سیستمی که از اصول طراحی دامنه محور (DDD) پیروی می‌کند، مدیریت این ستون‌های حسابرسی در ریشه‌های مجموع و نهادهای فرزندشان می‌تواند کمی چالش برانگیز باشد. این پست وبلاگ شما را از طریق یک رویکرد عملی برای به روز رسانی این ستون های حسابرسی با استفاده از Entity Framework Core راهنمایی می کند.

شناخت دامنه و موجودیت ها

در DDD، یک ریشه جمع، موجودیت اصلی در گروهی از موجودیت های مرتبط است که از ثبات و یکپارچگی کل مجموعه اطمینان می دهد. برای مثال ما، فرض می‌کنیم که همه نهادهایی که رابط IAuditedEntity را پیاده‌سازی می‌کنند، باید ستون‌های حسابرسی خود را به‌روزرسانی کنند.

public interface IAuditedEntity
{
DateTime CreatedOn { get; set; }
string CreatedBy { get; set; }
DateTime UpdatedOn { get; set; }
string UpdatedBy { get; set; }
}

نهادهایی که این رابط را پیاده سازی می کنند، هر زمان که تغییرات ایجاد شود، ویژگی های حسابرسی آنها تنظیم می شود.

نادیده گرفتن روش SaveChangesAsync

برای تنظیم خودکار ستون‌های ممیزی، می‌توانیم متد SaveChangesAsync را در DbContext خود لغو کنیم. این روش عملیات ذخیره را قطع می کند و به ما اجازه می دهد تا قبل از اینکه تغییرات به پایگاه داده متعهد شوند، ستون های ممیزی را تنظیم کنیم.

public override Task SaveChangesAsync(CancellationToken cancellationToken = default)
{
SetAuditColumns();
return base.SaveChangesAsync(cancellationToken);
}

پیاده سازی روش SetAuditColumns

روش SetAuditColumns بر روی تمام نهادهای ردیابی شده تکرار می شود و ویژگی های حسابرسی را بر اساس وضعیت آنها (افزوده یا اصلاح شده) تنظیم می کند. این تضمین می کند که هر بار که یک نهاد اضافه یا به روز می شود، ستون های حسابرسی مطابق با آن پر می شوند.

private void SetAuditColumns()
{
foreach (var item in ChangeTracker.Entries()
.Where(e => e.Entity is IAuditedEntity))
{
var entity = item.Entity as IAuditedEntity;
switch (item.State)
{
case EntityState.Added:
entity.CreatedOn = DateTime.UtcNow;
entity.UpdatedOn = DateTime.UtcNow;
entity.CreatedBy = string.IsNullOrEmpty(this.requestContext.Email) ? "System" : this.requestContext.Email;
entity.UpdatedBy = string.IsNullOrEmpty(this.requestContext.Email) ? "System" : this.requestContext.Email;
break;
case EntityState.Modified:
entity.UpdatedOn = DateTime.UtcNow;
entity.UpdatedBy = string.IsNullOrEmpty(this.requestContext.Email) ? "System" : this.requestContext.Email;
break;
}
}
}

اطلاعات بیشتر در مورد RequestContext:

requestContext سرویسی است که در مرحله قبلی در خط لوله درخواست برنامه پر شده است. معمولاً اطلاعات مربوط به کاربر که درخواست را آغاز کرده است، مانند آدرس ایمیل آنها و سایر داده های مرتبط استخراج می کند. سپس این زمینه به DbContext تزریق می‌شود و به آن اجازه می‌دهد تا هر جا که لازم باشد، از جمله در منطق ستون حسابرسی ما، مصرف شود.

public class RequestContext
{
public string Email { get; set; }
// Other properties like UserId, UserName, etc.
}

نتیجه

خودکارسازی جمعیت ستون های حسابرسی در نهادهای شما یک جنبه حیاتی برای حفظ یکپارچگی داده ها و پاسخگویی است. با استفاده از اصول ChangeTracker و DDD EF Core، می‌توانید این ویژگی‌ها را در ریشه‌های مجموع و موجودیت‌های فرزندتان به طور موثر مدیریت کنید. این رویکرد نه تنها کد دیگ بخار را کاهش می دهد، بلکه ثبات و دقت در داده های حسابرسی شما را تضمین می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا