我们说我有一个班级Person
。此类依赖于名为MessagingService
的服务;一个方法sendMessage(String msg)
的接口。今天有三个类实现这个接口:
(1)EmailMessagingService
(2)TextMessagingService
(3)VoiceMessagingService
(将来会有更多的实现)。
Person,EmailMessagingService,TextMessagingService和VoiceMessagingService都由不同的团队拥有,是单独的maven项目,以及单独的git repos,
问题:
(1)我可以使用界面MessagingService
做什么?这应该是一个单独的maven项目和git repo,以便所有四个项目:Person
,EmailMessagingService
和TextMessagingService
,VoiceMessagingService
依赖于它吗?或者/它是否应该成为Person
项目的一部分?
(2)如果它可以是Person
项目的一部分,我怎么能让三个实现项目仅依赖于接口MessagingService
。即使MessagingService
项目是Person
项目的一部分,Person
仍可以是单独的工件吗?
(3)我想要一个与每个实现打包在一起的Person
实例,并分别在生产中运行它。因此EmailMessagingService
的一个实例使用Person
。 TextMessagingService
的第二个实例使用VoiceMessagingService
。第三个实例使用Person
。以这种方式打包Person
的最佳方式是什么?我应该Person
依赖所有三个项目吗?我可以拥有它,以便{{1}}不依赖于任何实现类吗?
答案 0 :(得分:0)
广告1):
我会创建类似于" commons"包含MessagingService
接口的项目。所有其他4个项目(Person +您的3个实现)都将此commons项目包含为Maven依赖项。 Person还包括3个实现作为依赖。
ad 2)看到我对你的第一个问题的回答。这是同样的原则。
ad 3)我不确定您使用的是哪种DI。您可以使用其限定符注入所有3个服务。然后在创建Person对象时,设置所有3个服务(通过构造函数或setter)