Maven项目组织:一个接口多个实现

时间:2017-07-10 12:55:03

标签: java maven dependency-injection interface

我们说我有一个班级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。即使MessagingService项目是Person项目的一部分,Person仍可以是单独的工件吗?

(3)我想要一个与每个实现打包在一起的Person实例,并分别在生产中运行它。因此EmailMessagingService的一个实例使用PersonTextMessagingService的第二个实例使用VoiceMessagingService。第三个实例使用Person。以这种方式打包Person的最佳方式是什么?我应该Person依赖所有三个项目吗?我可以拥有它,以便{{1}}不依赖于任何实现类吗?

1 个答案:

答案 0 :(得分:0)

广告1):

我会创建类似于" commons"包含MessagingService接口的项目。所有其他4个项目(Person +您的3个实现)都将此commons项目包含为Maven依赖项。 Person还包括3个实现作为依赖。

ad 2)看到我对你的第一个问题的回答。这是同样的原则。

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