在域驱动设计中使用外部Web服务

cha*_*dra 7 dns domain-driven-design

我想在我的域驱动设计项目中使用外部第三方Web服务,但我无法理解我应该在哪个层访问外部Web服务.在域服务中但我不这么认为,因为域服务仅适用于域对象.但我的要求是,我必须根据外部webservice的输入执行操作列表,我必须在域服务中执行另一项任务.我很迷惑.

Mar*_*ijn 5

您可以做的是,在您的域项目中根据您的域模型引入所需服务的界面.每当您的域中的某个类需要该服务时,您都会向其传递对此接口的实现的引用.

然后创建一个"连接器实现",它实现此接口并连接到您需要使用的Web服务.当您启动应用程序时,您将为域类提供此实现,例如使用依赖项注入框架.

此连接器具有对您的域模型和Web服务定义的引用.您的域模型没有引用连接器实现或Web服务 - 它只知道域项目中定义的接口.这称为控制反转.

这样,您的域类对Web服务一无所知,只了解您在域模型中定义的接口.因此,您的域逻辑与"邪恶的"外部世界保持分离.


Vij*_*tel 5

您需要一个新的应用程序服务来访问外部Web服务。如前所述,您将服务实现注入到域对象中。

请参见Eric Evans 的“域驱动设计”的第105页。或者,请在此处查看我的答案以了解DDD中不同的服务类型。

  • 您告诉我创建应用程序服务,并将其注入域对象。那可能吗 ?域对象可以访问应用程序服务。如何 ?其他人告诉我在域服务中做。这里一团糟。 (2认同)

Mas*_*uso 3

据我猜测,您需要使用外部 Web 服务来执行某些操作。如果对于操作来说,您指的是您的业务逻辑,我认为正确的位置应该是您的业务逻辑层。在您的上下文中,您只需要使用它们即可。如果您需要计算产品价格,您会在哪里调用计算增值税的外部 dll?

我希望这是有道理的:-)