接口属于多层应用程序的位置

时间:2010-02-22 20:22:20

标签: architecture

所以假设您有一个三层应用程序,其中包含用于简单应用程序的层UI,服务和存储库,假设保存地址。

如果AddressService有一个接口IAddressService,那么该接口属于哪里?我知道“在地址服务中”看起来似乎是一个明显的答案,但如果它在地址服务中,它似乎打败了拥有接口的点,这样只要它实现了IAddressService,就可以交换任何服务库。

(特别是这是一个.net问题空间,但它可能更通用,因此它是标记的架构)

4 个答案:

答案 0 :(得分:3)

地址服务程序集是它的正确位置。

  

如果它在地址服务中   似乎打败了这一点   拥有任何界面   服务库可以换成   只要它实现了IAddressService

接口的目的是使调用者能够交换其他实现。提供一个具体的实现(或多个实现,就此而言)根本不会干扰它。

我唯一一次制作仅限接口的程序集就是我没有提供任何实现。

答案 1 :(得分:1)

将它们放在一个单独的程序集中,例如AddressService.InterfacesAddressService.Contracts,由所有三个层共享。

答案 2 :(得分:0)

我倾向于将它们放在子命名空间/目录下的相关程序集中。

例如,如果我有一个客户装配,那么ICustomerRepository或ICustomerAddressRepository等将会在

之下

.. Customers.Interfaces.ICustomerRepository

答案 3 :(得分:0)

我用来将服务接口放在程序集中,将实现放在另一个程序集中。我从来没有在.NET中使用它,但无论如何我都是这样做的,我认为这是将UI“或ahother API客户端”与服务实现分离的一种方式。

我需要在Java项目中进行这种分离,其中applet必须调用Web服务;所以,只有带接口的jar被发送到浏览器。如果jar也包含了实现,那将是一个沉重的applet。