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