什么是域驱动设计?

有人可以解释(简洁地说)域驱动设计究竟是什么? 我看到这个词很多,但真的不明白它是什么或它看起来像什么。 它与非域驱动设计有何不同?

另外,有人可以解释一个域对象是什么? 域与普通对象有何区别?


编辑:

由于这似乎是谷歌的最高结果,我的回答不是,请参考这个更好的答案:

https://stackoverflow.com/a/1222488/1240557

旧答案(不完整:))

为了创建好的软件,你必须知道该软件是什么。 除非您对银行业务的理解有充分的了解,否则您无法创建银行业务软件系统,您必须了解银行业务领域。

来自:Eric Evans的领域驱动设计。

本书在描述DDD方面做得很好。

注册以下载本书的摘要,或直接下载摘要。


领域驱动设计是开发复杂系统的方法和流程规定,其重点是将问题域内的活动,任务,事件和数据映射到解决方案领域的技术工件。

领域驱动设计的重点是了解问题领域,以便创建问题领域的抽象模型,然后可以在特定的一组技术中实施。 领域驱动设计作为一种方法论为这种模型开发和技术开发如何导致满足使用它的人们的需求的系统提供了指导,同时在面对问题领域的变化时也是稳健的。

领域驱动设计的过程方面涉及领域专家,知道问题领域的人,以及知道解决方案领域的设计/架构专家的人员之间的协作。 这个想法是建立一个共享语言的共享模型,以便来自这两个不同领域的人以两种不同的观点讨论解决方案时,他们实际上正在讨论共享概念的共享知识库。

在需要特定系统的人与设计和实施该系统的人之间缺乏共同的问题领域理解似乎是成功项目的核心障碍。 领域驱动设计是解决这一障碍的一种方法。

它不仅仅是一个对象模型。 重点在于共享通信和改进协作,以便可以发现问题领域内的实际需求并创建适当的解决方案以满足这些需求。

领域驱动设计:“好”和“挑战”提供了对此评论的简要概述:

DDD有助于发现顶层体系结构并告知软件需要复制的域的机制和动态。 具体而言,这意味着DDD分析做得很好,最大限度地减少了领域专家和软件架构师之间的误解,并且减少了随后发生的变更请求数量。 通过在较小的上下文中分割域复杂性,DDD避免了迫使项目架构师设计一个臃肿的对象模型,这是在制定实现细节时浪费了大量时间的原因 - 部分原因是需要处理的实体数量往往超出会议室白板的尺寸。

另请参阅这篇文章域驱动设计服务架构,它提供了一个简短的例子。 本文提供了域驱动设计的以下缩略图说明。

领域驱动设计主张基于与我们的用例相关的业务现实进行建模。 随着现在变得越来越老,炒作水平越来越低,我们中的许多人忘记了DDD方法真的有助于理解手头的问题,并设计软件以达到对解决方案的共同理解。 在构建应用程序时,DDD将问题视为域和子域。 它将独立的步骤/问题区域描述为有界的上下文,强调使用通用语言来讨论这些问题,并增加许多技术概念,如实体,价值对象和聚合根规则以支持实现。

Martin Fowler撰写了许多文章,其中提到了领域驱动设计作为方法论。 例如,本文BoundedContext概述了域驱动开发中的有界上下文概念。

在那些较年轻的时代,我们被建议建立一个统一的整个业务模型,但DDD认识到我们已经了解到“大型系统的领域模型的全面统一将不可行或成本效益”。 DDD将大型系统划分为有界的上下文,每个上下文都可以有一个统一的模型 - 实质上是构建MultipleCanonicalModels的一种方式。


这是另一篇很好的文章,你可以在Domain Driven Design上看看。 如果你的申请比大学作业严重。 基本前提是围绕您的实体构建结构,并具有强大的领域模型。 区分提供与基础设施相关的事物(如发送电子邮件,持久数据)的服务和实际执行您的核心业务需求的服务。

希望有所帮助。

链接地址: http://www.djcxy.com/p/26865.html

上一篇: What is Domain Driven Design?

下一篇: MongoDB vs CouchDB