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