域驱动设计 – 可以有人解释DDD在平原英语请?

我一直看到DDD(域驱动设计)被用于文章中 – 我已经阅读了关于DDD的维基百科条目,但仍然不能弄清楚它是什么,我将如何实现它在创建我的网站?
首先,如果你不知道你需要它,那么它可能是你不需要它。如果你不认识DDD解决的问题,那么也许你没有这些问题。甚至DDD倡导者经常指出DDD仅用于大(> 6个月)的项目。

假设你还在读这一点,我的DDD是这样的:

DDD是关于试图让你的软件成为现实世界系统或过程的模型。在使用DDD时,您将与一个能够解释真实世界系统如何工作的domain expert密切合作。例如,如果您正在开发一个处理赛马投注的系统,您的域名专家可能是一个有经验的博彩公司。

在您和领域专家之间,您构建一个无处不在的语言(UL),这基本上是系统的概念描述。这个想法是,你应该能够记录系统做的方式,域专家可以读它,并验证它是正确的。在我们的博彩示例中,无处不在的语言将包括诸如“赛跑”,“赌注”,“赔率”等词语的定义。

UL描述的概念将构成面向对象设计的基础。 DDD为您的对象如何交互提供了一些明确的指导,并帮助您将对象划分为以下类别:

>值对象,其表示可能具有子部分的值(例如,日期可以具有日,月和年)
>实体,它是具有身份的对象。例如,每个Customer对象都有自己的标识,因此我们知道具有相同名称的两个客户不是同一个客户
>聚合根是拥有其他对象的对象。这是一个复杂的概念,工作的基础上,有一些对象没有意义,除非他们有所有者。例如,’Order Line’对象没有意义,没有’Order’属于,因此我们说Order是聚合根,订单行对象只能通过Order对象中的方法来操作

DDD还推荐几种模式:

> Repository,持久化模式(保存和加载数据,通常到/从数据库)
> Factory,一种用于对象创建的模式
> Service,一种用于创建操作您的主域对象而不是域本身的一部分的对象的模式

现在,在这一点,我不得不说,如果你没有听说过任何这些事情,你不应该试图使用DDD在任何项目,你有一个截止日期。在尝试DDD之前,你应该熟悉design patternsenterprise design patterns.知道这些使DDD更容易掌握。并且,如上所述,InfoQ有一个free introduction to DDD(你也可以找到关于DDD的谈话)。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...