Проектирование, управляемое предметной областью, и определение интерфейса перекрестной задачи

Моя компания пытается внедрить DDD. Похоже, руководство DDD требует, чтобы сборка домена определяла все ее сервисные интерфейсы и позволяла разработчикам брать ссылку на сборку домена и реализовывать сервисные интерфейсы. Затем, используя DI, домен получит реализации. Тем не менее, с точки зрения перекрестных проблем кажется безответственным требовать, чтобы сборка домена переопределяла интерфейсы для таких вещей, как ведение журнала и т. д., которые не являются основной областью деятельности этой сборки. Я заметил, что ряд коммерческих компонентов, таких как Quartz.NET, используют стандартный, общепризнанный набор интерфейсов, таких как Apache Commons, для решения междисциплинарных проблем удобным для фреймворка способом. Соответствует ли это способу DDD или действительно нужно прыгать через обручи, такие как АОП, и переопределять одни и те же интерфейсы для сквозных задач, а затем использовать шаблон адаптера?

Для справки:

Из http://www.infoq.com/articles/ddd-in-practice

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

С http://cyrille.martraire.com/2009/12/your-crosscuttingconcerns-are-someone-else-core-domai/

«Ваши сквозные проблемы являются чьей-то основной сферой деятельности»


person Roman Dvoskin    schedule 30.07.2015    source источник


Ответы (2)


Похоже, руководство DDD требует сборки домена

DDD ничего не требует. Уровень предметной области группирует концепции предметной области и варианты использования. Абстракции, определенные на уровне домена, необходимы самому домену. И я имею в виду необходимость в вариантах использования домена. Логирование — это инфраструктурный (технический) аспект. Обычно такие абстракции являются частью общего общего слоя/компонента и могут использоваться всеми частями приложения.

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

«Ваши сквозные проблемы являются чьей-то основной сферой деятельности»

Это означает, что функциональность, которая является для вас просто системой поддержки, это цель (домен) другого компонента.

Я бы посоветовал вам также прочитать больше о DDD и попытаться понять образ мышления и использовать подход к использованию для вашего приложения. Думайте о своем приложении как о группе множества специализированных мини-приложений, каждое из которых имеет свои собственные задачи, но которые должны взаимодействовать с другими. Если вы строили что-то компонент за компонентом, то вы поняли DDD и, кстати, также практикуете Agile.

person MikeSW    schedule 30.07.2015

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

person Tyree Jackson    schedule 30.07.2015