DDD和“洋葱架构”之间有什么关系?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DDD和“洋葱架构”之间有什么关系?相关的知识,希望对你有一定的参考价值。

Qazxswpoi(DDD)和Jeffrey Palermo的“Domain-driven design”之间有什么关系?

答案

在我看来 - 它们相互补充 - 但是从非常不同的角度来看。

洋葱架构就是让Domain / BusinessLogic独立于“劣等”的东西,如数据访问,用户界面,服务等。洋葱架构并不真正关心你如何建立你拥有的域 - 它坚持保护它免受外部依赖。

领域驱动设计完全取决于您如何建模您的域以及您称之为对象的内容。这意味着每个Domain类应该与它所代表的业务域中所代表的内容有直接关系(即物理/现实世界)。因此,Customer对象应该在代码中被命名为Customer - 它应该具有与Customer在现实世界中相同的规则(或者尽可能接近)。

另一答案

如果您在您提供的链接中查看描述洋葱架构的图像,则域模型层是DDD关注的内容。

洋葱是系统的架构模式,而DDD是设计系统中对象子集的一种方式。这两者可以彼此不存在,所以两者都不是另一个的子集。如果你要一起使用它们 - 那么作为一个整体,使用DDD设计的部分将是整个系统的一个子集。

使用(可能是坏的)类比:洋葱是设计房屋的模式,而DDD是一种磨房木材的方式。

另一答案

我认为这两者在系统本身的“你如何设计和你的整体哲学是什么”上彼此不同。

洋葱架构遍布您的数据存储。这意味着你不关心你如何“完成工作”,但你更关心“我希望完成工作”。显然,最佳实践(小方法,良好的变量名称,可能是一些设计模式,如Sigleton等)在这个视图范围内仍然有意义,但更多的是代码本身,而不是整个应用程序概述。

另一方面,当我们谈论DDD时,我们谈论业务,当我们对架构做出决定时,我们始终拥有我们想要解决的业务模型。当我说决定时,我指的是系统可能具有的总数(从变量/类/函数名称到我们放置代码的一部分,以及在一天结束时我们如何讨论这个系统本身)。我们可以说DDD是商业模式的“编程抽象”。但是当然我们不能让DDD没有业务来解决e.x我们不能在像Shazam这样的程序上制作DDD但我们可以在像Facebook或Spotify这样的程序上制作DDD。

我的选择是你不能相互混合,而是第一个决定。

以上是关于DDD和“洋葱架构”之间有什么关系?的主要内容,如果未能解决你的问题,请参考以下文章

DDD系列 - 第0讲 DDD中常提到的应用架构总结(六边形洋葱整洁清晰)

DDD—分层架构洋葱架构六边形架构

OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

OnionArch 2.0 - 基于DDD的洋葱架构改进版开源

DDD的分层架构设计

清洁架构与洋葱架构