2

Недавно я получил книгу «Шаблоны», «Принципы и практика разработки доменов» Скотта Миллера и Ника Тьюна. В C# есть несколько хороших примеров, поэтому они немного отличаются от других книг DDD, которые я читал до того, что было на Java. Реализация события домена очень аккуратная из-за поддержки C# делегата и события.DDD: каковы альтернативы ООП для процедурных прикладных служб?

Однако меня беспокоит одна вещь, поскольку книга, изложенная в главе приложения, гласит, что она должна быть «процедурной в стиле и тонкой». Я понимаю, что прикладной уровень должен быть тонким, но почему процедурный стиль? Я не хочу писать процедурный код, иначе я бы не выбрал DDD. Я также обнаружил, что эта статья StackOverflow также этикетки Услуги Прикладные процедурный код:

https://softwareengineering.stackexchange.com/questions/279369/conceptual-mismatch-between-ddd-application-services-and-rest-api

Так что вы видите? Службы приложений носят процедурный характер, а не ООП. Это заставляет меня задаться вопросом, могу ли я улучшить дизайн, чтобы быть более OO, заменив процедурный интерфейс прикладного сервиса на интерфейс OO. В этой статье предполагается, что объекты метода будут работать и работают ли они? Чем больше альтернатив OO для процедурных приложений? Может ли кто-нибудь уточнить?

http://ayende.com/blog/2145/entities-services-and-what-goes-between-them

+0

Стиль операций службы приложений иногда называется «Сценарий транзакций». Может быть, это менее запутанно в отношении парадигмы программирования. – theDmi

ответ

1

Все методы в ОО мире являются процедурными :)

Я думаю, что авторы пытаются принести через что услуга приложения реализована как операция сценария. Таким образом, он просто координирует домен и различные другие биты инфраструктуры как последовательный набор вызовов. В идеале границы транзакций также обрабатываются на уровне службы приложений.

Возможно Martin Fowler's service layer Рецензия предоставит больше информации.

Вы можете быть запутанной Структурное программирование с процедурным кодом :)

+2

Для меня метод, который работает с собственными данными объекта, не является процедурным, его то, что должен представлять объект, комбинация данных и поведения. Его процедурный характер, если данные и поведение разделены, поэтому модель Anemic Domain является процедурной и антипаттерной. –

+0

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

7

службы Приложения не процедурная в смысле программирования парадигмы термина. Это объект , который инкапсулирует данные (ссылки на его объекты-соавторы) и поведение - координирует вызовы этих соавторов.

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

  • получить объект домена из хранилища
  • вызова метод на этом объекте
  • сохранить объект

вы не можете избежать этого процедурного/последовательного характера, независимо от программирования парадигмы.

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

Смежные вопросы