【发布时间】:2012-07-05 12:02:03
【问题描述】:
我正在构建一个包含表示层 (PL)、业务逻辑层 (BLL) 和数据访问层 (DAL) 的 3 层架构。
传统的 3 层架构逻辑规定 BLL 应充当 PL 和 DAL 之间的中介。 PL 甚至不应该知道存在数据库,而 DAL 不应该知道存在 BLL 或 PL。
上述实施将在 3 个不同的物理项目之间创建以下依赖关系,如下所示
- PL 项目 -> BLL DLL 参考
- BLL 项目 -> DAL DLL 参考
- DAL 项目 -> 无参考
然而,通过在 BLL 中定义接口以供 DAL 实现并通过构造函数注入使用 DI 在 BLL 和 DAL 之间应用 IOC 的概念,将改变依赖关系,如下所示
- PL 项目 -> BLL DLL 参考,DAL DLL 参考(用于具体类型的 DI 到 BLL 对象的构造函数)
- BLL 项目 -> 无参考
- DAL 项目 -> BLL DLL 参考(用于实现 BLL 接口)
那么,IOC 和传统的 3 层有冲突吗?
理想情况下,我希望实现以下目标,同时通过 DI 维持我的 IOC。
- PL 项目 -> BLL DLL 参考
- BLL 项目 -> 无参考
- DAL 项目 -> BLL DLL 参考
你是怎么做到的?
【问题讨论】:
-
老问题,但我认为这个其他 SO 答案可以提供帮助:stackoverflow.com/questions/9501604/…。基本上,您不希望您的 BLL 引用 DAL,而是使用您的 IoC 容器注入它。因此,您的组合根(应用程序入口点,可能在 PL 项目中)将引用您的所有 DLL,或者您使用后期绑定。
标签: dependency-injection inversion-of-control 3-tier