我正在构建一个带有表示层(PL),业务逻辑层(BLL)和数据访问层(DAL)的3层架构。
传统的3层架构逻辑表明BLL应该充当PL和DAL之间的中介。 PL不应该知道存在数据库,而DAL不应该知道存在BLL或PL。
以上实施将在3个不同的物理项目之间创建以下依赖关系,如下所示
- PL Project - >参考BLL DLL
- BLL项目 - > DAL DLL的参考
- DAL项目 - >没有参考
然而,通过在BLL中定义接口来实现和使用DI通过构造函数注入来在BLL和DAL之间应用IOC的概念将改变依赖性,如下所示
- PL Project - > BLL DLL的参考,DAL DLL的参考(用于具体类型的DI到BLL对象的构造函数)
- BLL项目 - >没有参考
- DAL项目 - > BLL DLL的参考(用于实现BLL接口)
国际奥委会和传统的三级冲突是什么?
理想情况下,我想实现以下目标,同时用DI维持我的IOC。
- PL Project - >参考BLL DLL
- BLL项目 - >没有参考
- DAL项目 - > BLL DLL的参考
你是怎么做到的?
答案 0 :(得分:2)
首先,您可以考虑使用接口来解耦图层,并且可以将接口分隔为单独的dll' s。这样,每个层只依赖于下面层的接口。
我也不确定为什么你需要从DAL到BLL的耦合?这是回电吗?你不能使用事件吗?
假设所有3个等级都在进行中,并假设您的PL是进入点'到你的应用程序(组合根),IMO通常的依赖关系,如果你已经用PL中的引导代码分离出接口,是:
PL可以将IoC配置卸载到Bootstrapper dll,导致:
对于某些容器,您可以避免要求using configuration, or convention引用引导程序中的所有dll。但是,这些dll显然仍需要与您的应用程序一起部署。