在六边形架构中动态加载适配器的最佳方法?

时间:2018-05-20 15:52:02

标签: architecture domain-driven-design restful-architecture ddd-service hexagonal-architecture

我想在我的userManagement boundedContext中应用六边形体系结构。所以我想定义2个端口(一个用于UI,另一个用于serviceBus集成,以监听来自其他服务的事件)。

问题是我是否要为adapters实施UI port(我不确定它应该被称为UI port,基本上就是CreateNewUser, BlockUser, CheckIfUserExists操作所在的接口)使用不同的技术 WCF Owin 。如何将它们添加到我的控制台应用程序?

假设我想使用 WCF 实施Soap adapter,并使用 Owin 休息。在许多示例中,我看到人们为每个驱动适配器创建单独的控制台应用程序,即:MyDDD.UserManagement.Api.Rest.HostMyDDD.UserManagement.Api.Soap.Host。我想要实现的是一个主机应用程序和以某种方式连接适配器的能力。请分享您的想法!

1 个答案:

答案 0 :(得分:1)

  

所以我想定义2个端口(一个用于UI,另一个用于serviceBus)   集成,监听来自其他服务的事件。)

你错过了端口的概念。您称之为UI和服务总线集成的是适配器。它们是端口的2个适配器。他们使用端口。他们称之为港口提供的业务。该端口与技术无关,独立于交付机制。该端口只是一个提供应用程序用例的界面。

  

UI端口(我不确定它应该被称为UI端口,基本上就是这个   接口CreateNewUser,BlockUser,CheckIfUserExists   正常运营)

应根据其目的命名端口。如果操作是用于管理用户,我应该将其称为“userManagement”。或者,如果您的BC以这种方式命名,请将端口称为“api”(我更喜欢有意义的名称)。

  

如果我想实现适配器......如何将它们添加到我的控制台   应用?

我认为你错了。如果通过控制台表示CLI,则控制台是该端口的另一个适配器。你没有添加适配器。

  

如果我想使用不同的UI端口实现适配器   技术WCF和Owin。如何将它们添加到我的控制台应用程序中?

我告诉你我的方式:适配器声明自己的名字(带有自定义注释)。引导整个系统时,主要组件扫描适配器,并通过检查其名称为每个端口选择所需的适配器。

  

我想要实现的是一个主机应用程序和连接能力   以某种方式适应它。

我是这样做的:我有一个多模块项目。六边形是一个模块,每个适配器是另一个模块。我有另一个名为“main”的模块,它们一起构建并运行你想要的适配器。例如,您可以将每个端口所需的适配器放在属性文件中。这就是我这样做的方式。