【问题标题】:Maven project organization: one interface multiple implementationsMaven项目组织:一个接口多个实现
【发布时间】:2017-07-10 12:55:03
【问题描述】:

假设我有一门课Person。这个类依赖于一个名为MessagingService的服务;具有一种方法sendMessage(String msg) 的接口。今天有三个类实现了这个接口:
(1)EmailMessagingService
(2)TextMessagingService
(3)VoiceMessagingService
(未来可能会有更多的实现)。

Person、EmailMessagingService、TextMessagingService 和 VoiceMessagingService 都属于不同的团队,是独立的 maven 项目和独立的 git repos,

问题:

(1) 接口MessagingService可以做什么?那也应该是一个单独的 maven 项目和 git repo,以便所有四个项目:PersonEmailMessagingServiceTextMessagingServiceVoiceMessagingService 都依赖它?或者它可以/应该成为Person 项目的一部分吗?

(2)如果可以是Person项目的一部分,那三个实现项目怎么可能只依赖接口MessagingService。即使 Person 项目的一部分,MessagingService 仍然可以作为单独的工件吗?

(3) 我想要一个Person 的实例与每个实现一起打包,并在生产中单独运行它。所以Person 的一个实例使用EmailMessagingServicePerson 的第二个实例使用 TextMessagingService。第三个实例使用VoiceMessagingService。以这种方式包装Person 的最佳方法是什么?我应该让Person 依赖于所有三个项目吗?我可以让Person 不依赖于任何实现类吗?

【问题讨论】:

    标签: java maven dependency-injection interface


    【解决方案1】:

    广告 1):

    我会创建一个类似于“commons”的项目,其中包含您的MessagingService 接口。所有其他 4 个项目(Person + 你的 3 个实现)都包含这个 commons 项目作为 Maven 依赖项。 Person 也包含这 3 个实现作为依赖项。

    ad 2) 请参阅我对您的第一个问题的回答。原理是一样的。

    ad 3) 我不确定您使用的是哪种 DI。您可以使用它们的限定符注入所有 3 种服务。然后在创建 Person 对象时,设置所有 3 个服务(通过构造函数或设置器)

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 2011-11-27
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2014-01-24
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多