Доменные объекты / сервисы и уровень бизнес-логики
Что такое доменные объекты и доменные сервисы в архитектуре программного обеспечения? Я не знаком с ними или как они отличаются от уровня бизнес-логики?
4 ответа
Разные люди используют эти термины несколько по-разному, но вот мое мнение:
1) "Бизнес" и "домен" - это примерно синонимы. "Домен" является более общим в том смысле, что он не предполагает, что вы пишете бизнес-приложение. Поэтому, если бы мы писали научное приложение или игру, мы могли бы предпочесть ссылаться на соответствующую часть кода как "домен", а не как "бизнес" код. Так что в оставшейся части этого объяснения я буду использовать "домен", так как он более общий.
2) "Доменная логика" охватывает как "доменные объекты", так и "доменные сервисы". По разным причинам (техническим и другим) во многих архитектурах используется проект, в котором логика домена разделяется на объекты для хранения данных ("объекты домена") и объекты, которые ими манипулируют ("доменные службы"). Мартин Фаулер и другие отметили, что это не очень ОО, так как большая часть концепции ОО состоит в том, чтобы объединить функциональность с данными, и это правильно, но это так и есть. Доменные объекты - это данные, а доменные сервисы - это часть дел с данными.
3) В дизайне, управляемом доменом, идея состоит в том, чтобы вернуться к истинному дизайну ОО, и поэтому различные методы обслуживания возвращаются к объектам домена, так что у вас есть объекты в смысле ОО, а не то, что иногда называют "анемичным". " объекты. В DDD сами доменные объекты более устойчивы, и поэтому они формируют доменную логику. В действительности могут существовать и некоторые доменные сервисы, но в DDD это обычно меньше, чем в более традиционной модели доменных объектов или сервисов.
Уровень бизнес-логики также называется уровнем домена. Это уровень / уровень, который обрабатывает всю бизнес-логику.
Доменные объекты и доменные службы - это классы, которые вы используете для создания вашего доменного уровня.
Нам необходимо понять обязанности прикладного уровня и уровня домена (бизнеса), чтобы понять разницу. Уровень домена представляет бизнес-объекты, в основном бизнес-объекты, возможно, в некоторой степени абстрагированные, и доменные сервисы. Уровень домена изменяется только тогда, когда меняется бизнес или контекст домена меняется в рамках бизнеса. Прикладной уровень "живет" поверх уровня домена и часто (предпочтительно) отделен от уровня домена, как в случае веб-приложения MVC asp.net, где часть контроллера - это уровень приложения, а часть HTML - это уровень представления. Уровень приложения изменяется в соответствии с назначением этого конкретного приложения (или службы, API, приложения и т. Д.)
Позвольте мне предложить этот пример сценария корпоративного приложения, с которым я работал, чтобы объяснить, почему доменный уровень и бизнес-уровень оба содержат бизнес-логику, но различаются.
Предположим, у меня есть продукт COTS, который представляет собой чистый движок Case Management, скажем, реализацию OMG CMMN. Целая куча бизнес-логики на бизнес-уровне, которая работает с кучей сущностей из уровня данных.
Теперь продолжайте предполагать, что у меня есть два клиента, которые являются системными интеграторами, один из которых создает систему управления юридическими случаями, а другой - управление медицинскими услугами. оба являются кейс-менеджментом, но имеют свои собственные доменные термины, объекты, процедуры, отраслевые архитектуры и т. д.
Каждый из них добавит свой собственный уровень домена, чтобы они могли работать в терминах и понятиях соответствующего бизнес-домена.
Так что да, он содержит бизнес-логику, но уровень домена - это способ объединить общий бизнес многократного использования с конкретным бизнесом.
Чем "проще" приложение, тем больше похожи модель предметной области и модель данных, а также бизнес-логика и логика предметной области. Но когда вы увеличиваете "полезность" компонента, расходятся, в конце концов, проблемы разделяются.