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

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

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