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

时间:2010-08-03 18:29:58

标签: c# java architecture domain-driven-design onion-architecture

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

3 个答案:

答案 0 :(得分:29)

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

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

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

答案 1 :(得分:24)

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

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

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

答案 2 :(得分:0)

我认为两者在"你如何设计以及你的整体理念是什么相互不同?在系统本身。

洋葱架构世界各地都在您的数据存储区。这意味着你不关心你是如何做这项工作的。但你更关心"我希望完成工作"。显然,最佳实践(小方法,良好的变量名称,也许某些设计模式,如Sigleton等)在这个视图范围内仍然具有意义,但更多的是代码本身,而不是整个应用程序概述。

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

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