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