Value Object — Вікіпедія
Value Object — об'єкт який повністю ідентифікується своїми атрибутами.
- Повністю визначається своїми атрибутами. Два Value object вважаються рівними, якщо всі їх властивості однакові.
- Є незмінним.
Для того щоб було легше розпізнати клас як Value object можна додати маркер інтерфейс аби винести спільну логіку (наприклад, порівняння атрибутів) в абстрактний клас.
public interface IValueObject { }
Дві адреси вважаються однаковими, якщо у них збігається вулиця та місто:
public class Address : IValueObject { public string Street { get; private set; } public string City { get; private set; } public Address(string street, string city) { Street = street; City = city; } }
Валюта і кількість окремо нічого не визначають і лише в сукупності формують цілісний об'єкт:
public class Money : IValueObject { public decimal Amount { get; } public string Currency { get; } }
Зміни в проміжку часу ведуть до створення нового об'єкта, тим самим забезпечуючи незмінність:
public class DateRange : IValueObject { public DateTime Start { get; private set; } public DateTime End { get; private set; } public DateRange(DateTime start, DateTime end) { Start = start; End = end; } public DateRange ChangeEnd(DateTime end) { return new DateRange(this.Start, end); } public TimeSpan Duration() { return End - Start; } }
- Предметно-орієнтоване проєктування
- Шаблони проєктування програмного забезпечення
- Об'єктно-орієнтоване програмування
- Value Object [Архівовано 12 листопада 2020 у Wayback Machine.]