我们目前在一个项目中有很多类,每个类都实现一个接口,主要是出于DI的原因.
现在,我个人的感觉是这些接口应该放在同一个程序集中的一个单独的命名空间中(所以我们有一个MyCompany.CoolApp.DataAccess程序集,并且在其中有一个Interfaces命名空间给出 MyCompany.CoolApp.DataAccess.Interfaces).
但是,有人建议这些接口实际上应该在它们自己的程序集中.我的问题是 - 他们是对的吗?我可以看到有一些好处(例如,其他项目只需要使用接口程序集),但在一天结束时,所有这些程序集都需要加载.在我看来,可能会有一个稍微复杂的部署问题,因为Visual Studio不会自动将实现程序集拉入目标的bin文件夹.
是否有针对此的最佳实践指南?
编辑:
为了使我的观点更清楚:我们已经将UI,DataAccess,DataModel和其他东西分成不同的程序集.我们当前也可以毫不费力地将我们的实现换成不同的实现,因为我们使用Unity(IOC框架)将实现类映射到接口.我应该指出,除了多态性的原因和为单元测试创建模拟之外,我们从不编写同一接口的两个实现.因此,除了单元测试之外,我们目前没有"换出"实现.
我看到在与实现相同的程序集中使用接口的唯一缺点是将加载整个程序集(包括未使用的实现).
但是,我可以看到将它们放在不同的程序集中意味着开发人员不会意外地"新"实现类而不是使用IOC包装器创建它.
我从答案中无法理解的一点是部署问题.如果我只是依赖于接口程序集,我会有类似以下结构的东西:
MyCompany.MyApplication.WebUI
References:
MyCompany.MyApplication.Controllers.Interfaces
MyCompany.MyApplication.Bindings.Interfaces
etc...
Run Code Online (Sandbox Code Playgroud)
当我构建它时,自动放入bin文件夹的程序集就是那些接口程序集.但是,我在单元格中的类型映射将不同的接口映射到它们的实际实现.包含我的实现的程序集如何最终在bin文件夹中?