Auditable Entity (шаблон проєктування): відмінності між версіями

Вилучено вміст Додано вміст
Створена сторінка: '''Auditable Entity'''  — шаблон проєктування, який надає дані звітності про зміну стану сут...
(Немає відмінностей)

Версія за 20:42, 19 листопада 2020

Auditable Entity  — шаблон проєктування, який надає дані звітності про зміну стану сутності.

Опис

Нехай, необхідно отримувати інформацію про зміну сутності. Додамо базовим клас, який містить цей необхідний функціонал.

public abstract class AuditableEntity
{
    public DateTime CreatedAt { get; set; }
    public string CreatedBy { get; set; }

    public DateTime ModifiedAt { get; set; }
    public string ModifiedBy { get; set; }
}

public class User : AuditableEntity
{
    public string Name { get; set; }
}

Тоді при створені чи зміні сутності необхідно оновлювати значення цих полів. Зручно помістити цю логіку в одне місце, а не розкидувати по коду програми. Скористаємось одиницею роботи для цього.

public class UnitOfWork
{
    private List<EntityEntry> _trackedEntities = new List<EntityEntry>();

    public void Commit()
    {
        foreach (var entityEntry in _trackedEntitites.Select(x => x.Entity).OfType<AuditableEntity>())
        {
             switch (entry.State)
             {
                    case EntityState.Added:
                        entry.Entity.CreatedBy = _currentUserService.GetUserId();
                        entry.Entity.CreatedAt = _dateTimeService.GetTime();
                        break;

                    case EntityState.Modified:
                        entry.Entity.ModifiedBy = _currentUserService.GetUserId();
                        entry.Entity.ModifiedAt = _dateTime.GetTime();
                        break;
             }
        }
    }
}

Реалізація

C#