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