lee*_*n3o 258 domain-driven-design
我一直看到DDD(领域驱动设计)在文章中被大量使用 - 我已经阅读了有关DDD的维基百科条目,但仍然无法弄清楚它实际上是什么以及如何在创建我的网站时实施它?
Rob*_*ght 547
首先,如果你不知道你需要它,那么你可能不需要它.如果您没有意识到DDD解决的问题,那么您可能没有遇到这些问题.即使DDD倡导者也经常指出DDD仅适用于大型(> 6个月)项目.
假设你现在还在阅读,我对DDD的看法是这样的:
DDD旨在使您的软件成为真实世界系统或流程的模型.在使用DDD时,您需要与可以解释现实世界系统如何工作的领域专家密切合作.例如,如果您正在开发一个处理在赛马上下注的系统,那么您的域名专家可能是一位经验丰富的博彩公司.
在您自己和领域专家之间,您构建了一种无处不在的语言(UL),它基本上是对系统的概念性描述.我们的想法是,您应该能够以域专家可以读取它并验证它是否正确的方式记下系统的功能.在我们的投注示例中,无处不在的语言将包括诸如"种族","下注","赔率"等词语的定义.
UL描述的概念将构成面向对象设计的基础.DDD为您的对象应如何交互提供了一些明确的指导,并帮助您将对象划分为以下类别:
DDD还推荐了几种模式:
现在,在这一点上,我必须说,如果您之前没有听说过任何这些事情,那么您不应该尝试在任何有截止日期的项目中使用DDD.在尝试DDD之前,您应该熟悉设计模式和企业设计模式.了解这些使DDD更容易掌握.而且,如上所述,InfoQ提供了免费的DDD介绍(在这里您也可以找到有关DDD的讨论).
Mat*_*lls 42
以StackOverflow为例.您不必开始设计某些Web表单,而是首先集中精力对问题域中的实体进行面向对象的建模,例如用户,问题,答案,投票,评论等.因为设计是由问题的细节驱动的域称为域驱动设计.
您可以在Eric Evans的书中阅读更多内容.