所以假设您有一个三层应用程序,其中包含用于简单应用程序的层UI,服务和存储库,假设保存地址。
如果AddressService有一个接口IAddressService,那么该接口属于哪里?我知道“在地址服务中”看起来似乎是一个明显的答案,但如果它在地址服务中,它似乎打败了拥有接口的点,这样只要它实现了IAddressService,就可以交换任何服务库。
(特别是这是一个.net问题空间,但它可能更通用,因此它是标记的架构)
答案 0 :(得分:3)
地址服务程序集是它的正确位置。
如果它在地址服务中 似乎打败了这一点 拥有任何界面 服务库可以换成 只要它实现了IAddressService
接口的目的是使调用者能够交换其他实现。提供一个具体的实现(或多个实现,就此而言)根本不会干扰它。
我唯一一次制作仅限接口的程序集就是我没有提供任何实现。
答案 1 :(得分:1)
将它们放在一个单独的程序集中,例如AddressService.Interfaces
或AddressService.Contracts
,由所有三个层共享。
答案 2 :(得分:0)
我倾向于将它们放在子命名空间/目录下的相关程序集中。
例如,如果我有一个客户装配,那么ICustomerRepository或ICustomerAddressRepository等将会在
之下.. Customers.Interfaces.ICustomerRepository
答案 3 :(得分:0)
我用来将服务接口放在程序集中,将实现放在另一个程序集中。我从来没有在.NET中使用它,但无论如何我都是这样做的,我认为这是将UI“或ahother API客户端”与服务实现分离的一种方式。
我需要在Java项目中进行这种分离,其中applet必须调用Web服务;所以,只有带接口的jar被发送到浏览器。如果jar也包含了实现,那将是一个沉重的applet。