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.]