DDD: Чи можуть непорушні об'єкти також бути сутностями?


9

Я прочитав незліченну кількість публікацій про відмінності між об'єктами Entity та Value, і, хоча я думаю, що принаймні концептуально я розумію, чим вони відрізняються, виявляється, що в деяких з цих публікацій автори вважають конкретну концепцію домену VO просто тому, що це є незмінним (таким чином, його стан ніколи не зміниться, принаймні в рамках конкретної доменної моделі).

Чи погоджуєтесь ви з тим, що якщо стан об'єкта ніколи не зміниться в межах конкретної доменної моделі, то цей об'єкт ніколи не повинен бути сутністю? Чому?


Я повинен навчитися деяких DDD, щоб я міг відповісти на деякі з цих питань розумно. Я підозрюю, що труднощі багатьох розробників програмного забезпечення з такими простими поняттями виникають із помилкового уявлення, що DDD є методологією програмування.
Роберт Харві

Відповіді:


4

Ідучи за книгою (Evans, 2004), "Об'єкт, визначений насамперед своєю ідентичністю, називається ENTITY". Це визначення не залежить від того, об'єкт є змінним чи незмінним. Я думаю, що набагато менше шансів, що незмінний об'єкт буде сутністю в даній області, тому це корисна евристика для визначення того, чи є об'єкт "об'єктом цінності" або "сутністю", але це не є частиною визначення.

Наприклад, скажімо, у вас є організація, яка представляє працівника, який може мати або не мати безпосереднього керівника. Якщо ви вирішили представити ідею відсутності прямого супервізора як посилання на "нульовий" об’єкт супервізора, то об'єкт "нульового" супервізора розумно вважається сутністю. І ви могли, мабуть, зробити цей "нульовий" об'єкт незмінним.


1
+1 Менеджер може бути прочитаний (незмінний) у певному контексті чи піддомені, але це не означає, що він не має ідентичності.
Адріан Шнайдер

Пробачте, що я щільна, але я не повністю розумію приклад вашого керівника. Ви хочете сказати, що у домені у нас було б два поняття, пов'язані з наглядом? Одна концепція буде представляти наглядових працівників, у яких є працівники, яких вони контролюють (в коді ця концепція буде реалізовуватися як змінна категорія Supervisor), а інша концепція описує керівника, який не контролює жодних працівників (і ця концепція буде реалізована як нуль у коді) ?
bckpwrld

@bckpwrld Ні, він, безумовно, означає Нульовий об’єкт .
maaartinus

2

Як я це прочитав, це те, що об'єкт цінності - це об'єкт, який не має ідентичності до себе і не має нічого спільного з тим, що його стан змінюється чи не змінюється. Це робить різницю між сутністю та об'єктом цінності у тому, що суб'єкт господарювання має первинний ключ, тоді як об'єкт значення не має; він матиме іноземний ключ до суб'єкта, якому він належить.

http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/

Я все ще можу змінити властивості об'єкта значення, але його не потрібно ніколи ідентифікувати незалежно від його сутності.


Я змішав термінологію з реляційних баз даних (первинний ключ) як ідентичність як метафору, будь ласка, не сприймайте це буквально
Кевін

На мій погляд, принаймні, навіть якщо в коді VO представлені з мутаційним типом (таким чином, екземпляри цього типу можуть змінювати свої властивості), концептуально ці VO все ще незмінні. Таким чином, зміна властивості екземпляра, що представляє конкретну VO, означає, що тепер цей самий екземпляр представляє інший VO. Іншими словами, VO концептуально завжди незмінні
bckpwrld
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.