洋葱与N层建筑

Ben*_*Sch 20 architecture dependency-injection inversion-of-control n-layer onion-architecture

事先有一件事:我从N层背景到达.

我现在花了很多时间来了解洋葱建筑和相关的领域驱动概念,如六角建筑阅读资源,如Jeff Palermo的系列博客文章,Mark Seemann从DI视角的贡献,"洋葱化你的建筑",和"干净的建筑".

所有这些文章的共同之处在于它们声称有以下几点:

  • 焦点围绕业务用例的域模型
  • 通过强调依赖性倒置原则,在层之间进行更松散的耦合
  • 提高外部基础架构的独立性,例如框架,数据持久性,UI
  • 更好的可测试性/可维护性

嗯,这听起来非常好听,那些图表看起来也很甜美.但是问题出现在我身上:仅仅通过在传统的N层架构中增加外墙来实现这一切吗?

  • 每个层只知道下面层的抽象
  • 具体实现可以保持在每个层的内部,因此与抽象处于相同的位置
  • 实现细节可以很容易地换出,因为它们是层的内部,不应该影响应用程序的其余部分

请帮助我了解以域为中心的架构的真正优势.

提前致谢!

小智 7

添加外墙实际上是从n层架构中构建洋葱架构的第一步.所以,是的,您可以立即获得许多好处.

由于您需要反转依赖关系控制,因此测试仍然存在问题.控制外观指向的内容需要转移到消费者,而不是提供者.这允许消费者将事物交换出来进行测试,或者在没有提供者知道的情况下改变实现.

  • 嗯,这并不像我理解的那样"真正"洋葱架构,因为在我的解决方案中,Presentation Layer仅引用(BLL的接口),而BLL仅引用(DAL的接口).在Onion中,由Jeff Palermo推动,PL也可以直接引用数据抽象接口,对吗? (5认同)