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