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
{
}
Див. також[ред. | ред. код]
- Предметно-орієнтоване проєктування
- Шаблони проєктування програмного забезпечення
- Об'єктно-орієнтоване програмування