Auditable Entity (шаблон проєктування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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 = _dateTimeService.GetTime();
                        break;
             }
        }
    }
}

Реалізація[ред. | ред. код]

C#[ред. | ред. код]