我应该将不相关的接口组合到一个库中吗?

时间:2010-03-19 12:20:04

标签: architecture

情况是这样的:

有独立的5项服务。每个服务都包含一个用于接口,实现和测试的项目。例如:

LocalizationService.Interfaces
LocalizationService.Implementation
LocalizationService.Test

每个服务都有一个WCF服务:

LocalizationService.WcfContract (including DataContracts)
LocalizationService.WcfHost

客户端应用程序可能主要使用所有服务。我应该将所有服务接口组合成一个通用接口吗?

AllServices.AllInterfaces

在我看来,这是一个坏主意。这些服务是独立的,没有理由引入依赖。我想,尤其是测试变得更加困难。然而,有人可能会说,必须包含5个库太麻烦了。

(我不知道如何标记这个。请随意重拍。)

3 个答案:

答案 0 :(得分:3)

我个人并不介意我必须包含5个库。我的观点是,如果您的服务完全相互独立,那么它们应该位于不同的库中。易于维护和增强可以应用于单个lib服务,而不是全面。

如果有人不喜欢包含5个库的问题,很容易解释原因。更灵活地提供增强功能,更小的下载(如果它是一个选项)等等。更不用说库的加载时间会更快。

对于OregonGhost来说,我没有想过ILMerge - 所以这里有一个可能有用的链接:Daniel Cazzulino's Blog : Leveraging ILMerge。我只听说过ILMerge - 并且没有机会使用它。希望有所帮助。

答案 1 :(得分:2)

绝对分离,请参阅:接口隔离原则(ISP)http://en.wikipedia.org/wiki/User:LupusDei108/Interface_Segregation_Principle

保持分离将使重构变得更容易等。对于消费者来说,吸引额外的东西(即可选)通常比陷入你不想要的东西更容易。

您似乎正在使用术语“接口”和“服务”,就好像它们是可互换的一样,但情况并非总是如此;如果您正在谈论“接口”,ISP肯定会申请,并且可能也会申请“服务”。

另一件需要注意的事情是,提供所有五种服务会产生更大的攻击面。将测试代码/套件暴露在PROD中很少是一个好主意:)

答案 2 :(得分:0)

问题的表达方式让我立刻想到Facade pattern,但我不确定你上面使用的语言(对我看起来像VB)所以我不知道它是怎么回事适用于该域名。