给定一个代码项目,它应该通过实现松散耦合的层、具有 IoC 容器等来遵守 SoC 原则,例如,一个简单的 ASP.NET MVC 解决方案,它分为以下程序集:
- 应用程序集+命名空间
- 模型组件+命名空间(包含访问数据库数据的具体存储库)
以及模型程序集中的具体存储库必须在哪里实现一个通用接口IMyBusinessRepository
,你会将那个接口放在哪个程序集中?
1) 如果您将该接口放入模型程序集中,那么如果不修改应用程序程序集的代码,就不可能用另一个程序集替换该程序集(至少如果它具有不同的命名空间)。此外,驻留在不同程序集中的替代 IMyBusinessRepository
实现必须引用原始程序集(Argh!)
2)如果你把它放在Application程序集中,如果不引用Application程序集,就不可能在其他项目中使用Model程序集(Argh!)
3) 或者您会为该接口创建一个单独的通用程序集,并且就此而言,为每个通用接口或一组接口创建一个单独的通用程序集?(啊?)
总而言之,X组件应该可以在应用程序A中轻松替换(仅通过更改引用),并且可以在应用程序B、C、D中重用。