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;     } } 

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]