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.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Value Object ob yekt yakij povnistyu identifikuyetsya svoyimi atributami VlastivostiPovnistyu viznachayetsya svoyimi atributami Dva Value object vvazhayutsya rivnimi yaksho vsi yih vlastivosti odnakovi Ye nezminnim PrikladDlya togo shob bulo legshe rozpiznati klas yak Value object mozhna dodati marker interfejs abi vinesti spilnu logiku napriklad porivnyannya atributiv v abstraktnij klas public interface IValueObject Dvi adresi vvazhayutsya odnakovimi yaksho u nih zbigayetsya vulicya ta misto 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 Valyuta i kilkist okremo nichogo ne viznachayut i lishe v sukupnosti formuyut cilisnij ob yekt public class Money IValueObject public decimal Amount get public string Currency get Zmini v promizhku chasu vedut do stvorennya novogo ob yekta tim samim zabezpechuyuchi nezminnist 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 Div takozhPredmetno oriyentovane proyektuvannya Shabloni proyektuvannya programnogo zabezpechennya Ob yektno oriyentovane programuvannyaDzherelaValue Object 12 listopada 2020 u Wayback Machine