传统的3层架构与3层的IOC架构

时间:2012-07-05 05:33:16

标签: dependency-injection inversion-of-control 3-tier

我正在构建一个带有表示层(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的参考   
  •   

你是怎么做到的?

1 个答案:

答案 0 :(得分:2)

首先,您可以考虑使用接口来解耦图层,并且可以将接口分隔为单独的dll' s。这样,每个层只依赖于下面层的接口。

我也不确定为什么你需要从DAL到BLL的耦合?这是回电吗?你不能使用事件吗?

假设所有3个等级都在进行中,并假设您的PL是进入点'到你的应用程序(组合根),IMO通常的依赖关系,如果你已经用PL中的引导代码分离出接口,是:

  • PL =>引用BLL和DAL(具体和接口)和IoC容器
  • BLL引用DAL(或仅仅是接口,如果适用)
  • DAL no Dependency(虽然通常会依赖DTO / POCO / Entities)

PL可以将IoC配置卸载到Bootstrapper dll,导致:

  • PL =>参考BLL接口和引导程序
  • Bootstrapper =>引用所有内容和IoC容器
  • BLL =>参考DAL接口
  • DAL =>没有依赖(虽然通常会依赖于DTO / POCO /实体)

对于某些容器,您可以避免要求using configuration, or convention引用引导程序中的所有dll。但是,这些dll显然仍需要与您的应用程序一起部署。