Ddd в php value object або об'єкт-значення

phpvalue objectDDD

Невеликий простий об'єкт, як гроші або діапазон дат, рівність яких не грунтується на ідентичності

Об'єкт-Значення (Value Object) - це об'єкт, який представляє собою поняття з предметної області. В DDD (Domain Driven Development - розробка на основі предметної області, або предметно-орієнтоване програмування) важливо те, що Value Object підтримує і збагачує Єдиний Мова вашої предметною Області. Це не тільки примітиви, які представляють собою деякі значення, - вони є повноправними громадянами предметною Області, які формують поведінку вашого застосування.

Переваги використання Value Objects

Найголовніше полягає в тому, що ці об'єкти відображають мову, на якому ви розмовляєте з іншими розробниками - коли ви говорите «Місце» (Location) все знають, що це означає. Друга перевага полягає в тому, що Value Object може затверджувати значення - підходить воно чи ні для того, щоб створити такий об'єкт.

Третім перевагою є те, що ви можете покладатися на тип - ви знаєте, що якщо такий Value Object був прийнятий в якості аргументу, він буде завжди в допустимому стані і вам не потрібно турбуватися про це. І також Value Object може містити деякі спеціалізовані методи. які мають сенс тільки в контексті цього значення і можуть бути розташовані в цьому об'єкті (не потрібно створювати дивні класи-утиліти).

Приклад Value Object

Як приклад Value Object-а, який є поширеним для всіх веб-додатків, я створив EmailAddress:

  • забезпечує, що Об'єкт-Значення EmailAddress завжди знаходиться в допустимому стані;
  • дозволяє використовувати підказки типів (Тайпей-хінтінг) і прибрати перевірки email-ів (згодом спростити логіку додатка);
  • надає можливість приведення до рядка;
  • надає метод для порівняння його з іншими EmailAddress.

одержимість примітивами

Ви можете неохоче ставитися до використання об'єктів в якості контейнерів для примітивних значень, але подібні речі описані як "запахи коду" під назвою «Одержимість примітивами»:

Одержимість примітивами - це використання примітивних типів даних для подання сутностей предметної області. Наприклад, ми використовуємо String для подання повідомлення, Integer як суми грошей, або Struct / Dictionary / Hash для подання конкретного об'єкта.

Використання Value Object-ів є однією зі стратегій боротьби з цим запахом. Ключова ідея тут - це зібрати поведінку даних навколо свого об'єкта. В іншому випадку такі дії будуть розкидані по всьому коду, що може привести до непотрібної складності і змусить вас ставитися з побоюванням до значень, переданим в методи.

незмінюваність

Value Object-и є важливими громадянами вашої предметною Області, які відображають його концепції. Переконайтеся, що ви докладете відповідну поведінку до таких об'єктів, яке згодом буде робити код більш організованим і краще передавати реальність, тому що ключовим аспектом і метою об'єктно-орієнтованого програмування є моделювання реального світу.

Схожі статті