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  { } 

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