Aggregate Root

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

Aggregate Root — сутність яка пов'язує граф об'єктів.

Властивості[ред. | ред. код]

  • Гарантує цілісність даних, що входять до графа системи.
  • Відповідає за збереження/оновлення/видалення усього графа об'єктів.
  • Доступ до об'єктів графа можливий лише через кореневу сутність.
  • Агрегат не може містити посилання на інший агрегат, лише на його ідентифікатор.

Приклад[ред. | ред. код]

Для того щоб було легше розпізнати клас як Aggregate Root можна додати маркер інтерфейс аби винести спільну логіку (наприклад, забезпечення консистентності даних) в абстрактний клас.

public interface IAggregateRoot
{
}

public abstract class AggregateRoot
{
   protected abstract bool Validate();
   public bool CanBeSaved() => Validate();
}

Сутність комп'ютер є цілісною лише в тому випадку, якщо вона містить відповідне обладнання та програмне забезпечення:

public class Computer : IEntity, IAggregateRoot
{
    public string Name { get; set; }
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }
}

public class Hardware : IEntity { }
public class Software : IValueObject { }

Часто використовується, як обмеження для сховищ збереження даних:

public interface IRepository<T> where T : IAggregateRoot 
{
}

Див. також[ред. | ред. код]