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.]
|
---|
| Основні шаблони | |
---|
| Твірні шаблони | |
---|
| Структурні шаблони | Адаптер (Adapter) • Декоратор (Decorator) • Замісник (Proxy) • Компонувальник (Composite) • Міст (Bridge) • Легковаговик (Flyweight) • Фасад (Facade) • Модуль • Виділення приватного класу даних • Близнюки |
---|
| Шаблони поведінки | Відвідувач (Visitor) • Інтерпретатор (Interpreter) • Ітератор (Iterator) • Команда (Command) • Ланцюжок відповідальностей (Chain of Responsibility) • Посередник (Mediator) • Спостерігач (Observer) • Стан (State) • Стратегія (Strategy) • Знімок (Memento) • Шаблонний метод (Template Method) • Одноразовий відвідувач • Null object • Специфікація • Feature toggle • Мультиметод • Перехоплювач (Interceptor) • Накопичувач (Collecting Parameter) • Слуга (Servant) |
---|
| Функційні | |
---|
| Патерни конкурентного програмування | |
---|
| Кешування | |
---|
| Архітектурні | Базові шаблони | |
---|
| Шаблони об'єктного структурування | |
---|
| Шаблони представлення | |
---|
| Шаблони предметно-орієнтованого проєктування | |
---|
| Шаблони сервісно-орієнтованої архітектури | |
---|
|
---|
| Архітектура корпоративних програмних додатків | Базові шаблони | Об'єкт-значення (Value Object) • Гроші (Money) • Особливий випадок (Special Case) • Супертип рівня (Layer Supertype) • Відокремлений інтерфейс (Separated Interface) • Шлюз (Gateway) • Розподільник (Mapper) • Реєстр (Registry) • Плагін (Plugin) • Набір записів (Record Set) • Заглушка сервісу (Service Stub) |
---|
| Шаблони логіки домену | |
---|
| Шаблони сховища даних | |
---|
| Шаблони об'єктно-реляційної поведінки | |
---|
| Шаблони об'єктно-реляційного структурування | Поле первинного ключа (Identity Field) • Розмітка зовнішніх ключів (Foreign Key Mapping) • Розмітка зв'язків таблиць (Association Table Mapping) • Відображення залежних об'єктів (Dependent Mapping) • Об'єднане значення (Embedded Value) • Серіалізований великий об'єкт (Serialized LOB) • Наслідування з однією таблицею (Single Table Inheritance) • Наслідування з таблицею для кожного класу (Class Table Inheritance) • Наслідування з таблицею для кожного конкретного класу (Concrete Table Inheritance) • Відображення із наслідуванням (Inheritance Mappers) • База даних звітності |
---|
| Шаблони обробки об'єктно-реляційних метаданих | Відображення на основі метаданих (Metadata Mapping) • Об'єкт-запит (Query Object) • Сховище (Repository) |
---|
| Шаблони вебпредставлення | |
---|
| Шаблони розподіленої обробки даних | |
---|
| Шаблони локального конкурентного програмування | Оптимістичне блокування (Optimistic Offline Lock) • Песимістичне блокування (Pessimistic Offline Lock) • Блокування із низьким рівнем деталізації (Coarse Grained Lock) • Неявне блокування (Implicit Lock) |
---|
| Шаблони збереження стану сеансу | Збереження стану сеансу на стороні клієнта (Client Session State) • Збереження стану сеансу на стороні сервера (Server Session State) • Збереження стану сеансу в базі даних (Database Session State) |
---|
|
---|
| Тестування | |
---|
| Інші | |
---|
| Див. також | |
---|
|