Именование DDD: объект домена

Рассмотрим определенные виды объектов, задействованных в доменно-ориентированном проектировании (DDD): сущности, объекты-значения, события домена и доменные службы.

Какие из них считаются объектами домена? И есть ли другие названия для абстракций, которые инкапсулируют их подмножество?

Я могу определить различные абстракции, которые полезно иметь при разговоре о DDD или моделях предметной области:

  • Сущности и объекты-значения. Я часто упоминаю "Сущности или объекты-значения". В частности, это те, которые моделируют состояние домена. Напротив, доменные службы не имеют состояния, и я бы сказал, что события домена просто отражают информацию о том, как домен пришел в свое текущее состояние.

  • Сущности, объекты-значения и события домена. Все они могут содержать или представлять данные, тогда как доменные службы определяют только поведение.

  • Все объекты, распознаваемые моделью предметной области. Полезно иметь возможность говорить о частях модели предметной области в целом, а не о концепциях за ее пределами.

Интересно, что даже тег domain-object в Stack Overflow имеет запутанное определение:

Объекты предметной области — это объекты, созданные для работы с логикой предметной области на уровне модели. Эти объекты обычно имитируют реальные (или виртуальные) предметы из реальной жизни: человека, почту, документ и т. д.

Первоначальное определение, ориентированное на «работу с логикой предметной области», склоняется ко «всем объектам, распознаваемым моделью предметной области». Затем примеры склоняются к «Сущностям и объектам-значениям».

DDD забивает четко определенный, недвусмысленный вездесущий язык, и не без оснований. Разве это не должно подавать пример? :)


person Timo    schedule 13.04.2020    source источник
comment
Просто отметим, что если, как вы говорите, вы смотрите на сущности и объекты-значения как на состояние предметной области, а на службы как на поведение без сохранения состояния, то то, что вы фактически описываете, является процедурным программированием. Не то, чтобы это было неправильно, но я считаю, что сочетание DDD с объектной ориентацией приводит к гораздо более понятному и удобному дизайну.   -  person Robert Bräutigam    schedule 15.04.2020
comment
@RobertBräutigam Я просто указывал, что службы не имеют гражданства, как указано Эриком Эвансом в синей книге: Сделать службу без гражданства. Я ни в коем случае не хотел сказать, что сущности и объекты-значения не имеют поведения. Напротив, я считаю, что богатая модель предметной области очень ценна.   -  person Timo    schedule 16.04.2020


Ответы (1)


Какие из них считаются объектами домена?

Все они. Это «объекты», реализующие нашу модель предметной области. В исходном тексте DDD Эрик Эванс также использовал фразу «элементы модели».

Различия между ними во многом являются следствием ограничений языка Java. Вам не понадобились бы «объекты ценности», если бы вы могли просто создавать индивидуальные ценности; вам не понадобились бы «доменные службы», если бы вы могли просто передать нужные вам возможности. Вам не понадобятся «события предметной области», если у вас есть «обмен сообщениями» как повсеместная конструкция и так далее.

DDD забивает четко определенный, недвусмысленный вездесущий язык, и не без оснований. Разве это не должно подавать пример? :)

Ну, часть загадки заключается в том, что эти шаблоны являются частью языка общего назначения, и одно из центральных сообщений DDD заключается в том, что вы не должны позволять проблемам общего назначения отвлекать вас от самой предметной области.

Тем не менее... да, сегодня было бы лучше, если бы Эванс хорошо разбирался в этих идеях восемнадцать лет назад и был в состоянии представить лучший язык и обеспечить контрмеры для предотвращения семантической диффузии.

person VoiceOfUnreason    schedule 13.04.2020
comment
Спасибо @VoiceOfUnreason. Обратите внимание, что это не вопрос о Java, и я не думаю, что Java конкретно повлияла на DDD своими ограничениями. ;) - person Timo; 13.04.2020