有人能解释一下(简明扼要地)什么是领域驱动设计吗?我经常看到这个术语,但我真的不明白它是什么,也不知道它看起来像什么。它与非域驱动的设计有什么不同?
另外,有人能解释一下什么是域对象吗?域与普通对象有何不同?
发布于 2011-03-16 21:24:31
编辑:
由于这似乎是谷歌上最好的结果,而我下面的答案不是,请参考这个更好的答案:
https://stackoverflow.com/a/1222488/1240557
老答案(不是很完整:)
为了创建一个好的软件,你必须知道这个软件是关于什么的。你不能创建一个银行软件系统,除非你对银行是关于什么有一个很好的理解,一个人必须理解银行领域。
出自: Eric Evans的领域驱动设计。
这本书在描述DDD方面做得相当好。
Register to download a summary of the book或download the summary directly。
发布于 2016-02-15 00:44:28
域驱动设计是用于开发复杂系统的方法和过程规定,其重点是将问题域中的活动、任务、事件和数据映射到解决方案域的技术构件中。
领域驱动设计的重点是理解问题领域,以便创建问题领域的抽象模型,然后可以在一组特定的技术中实现该模型。领域驱动设计作为一种方法论,为这种模型开发和技术开发如何产生一个满足使用它的人的需求的系统提供了指导方针,同时在面对问题领域的变化时也是健壮的。
领域驱动设计的过程端涉及领域专家和设计/体系结构专家之间的协作。我们的想法是拥有一个具有共享语言的共享模型,这样当来自这两个不同领域的人们从他们的两个不同的角度讨论解决方案时,他们实际上是在讨论一个具有共享概念的共享知识库。
在需要特定系统的人和设计和实现系统的人之间缺乏共同的问题域理解似乎是成功项目的核心障碍。领域驱动设计就是解决这一障碍的一种方法。
它不仅仅是拥有一个对象模型。重点实际上是共享通信和改进协作,以便可以发现问题域中的实际需求,并创建适当的解决方案来满足这些需求。
Domain-Driven Design: The Good and The Challenging用这条评论提供了一个简短的概述:
DDD有助于发现顶层体系结构,并告知软件需要复制的域的机制和动态。具体地说,这意味着做得好的DDD分析最大限度地减少了领域专家和软件架构师之间的误解,并减少了随后昂贵的更改请求数量。通过在较小的上下文中拆分领域复杂性,DDD避免了迫使项目架构师设计臃肿的对象模型,这是在制定实现细节时浪费的大量时间-部分原因是要处理的实体数量通常会超过会议室白板的大小。
另请参阅本文Domain Driven Design for Services Architecture,其中提供了一个简短的示例。本文提供了以下领域驱动设计的缩略图描述。
领域驱动设计提倡基于与我们的用例相关的业务现实的建模。由于DDD方法越来越陈旧,炒作水平越来越低,我们中的许多人都忘记了DDD方法确实有助于理解手头的问题,并有助于设计软件以达成对解决方案的共同理解。在构建应用程序时,DDD讨论域和子域的问题。它将问题的独立步骤/区域描述为有界上下文,强调一种公共语言来讨论这些问题,并添加了许多技术概念,如实体、值对象和聚合根规则来支持实现。
Martin Fowler写了许多文章,其中提到了域驱动设计作为一种方法论。例如,本文BoundedContext概述了域驱动开发中的有界上下文概念。
在那些年轻的日子里,我们被建议为整个业务建立一个统一的模型,但是
认识到我们已经了解到“对于一个大型系统来说,完全统一领域模型是不可行的,也是不划算的”1。因此,DDD将一个大型系统划分为多个有界的上下文,每个上下文都可以有一个统一的模型--本质上是一种构造MultipleCanonicalModels。
的方法。
发布于 2017-09-13 15:21:28
只能通过首先理解以下内容来理解域驱动设计:
什么是域?
为其构建系统的领域。机场管理、保险销售、咖啡店、轨道飞行,应有尽有。
一个应用程序跨越几个不同的域并不少见。例如,在线零售系统可能在以下领域中工作:发货(根据商品和目的地选择适当的送货方式)、定价(包括促销和用户特定的定价)和推荐(通过购买历史记录计算相关产品)。
什么是模型?
“一个对手头问题有用的近似值。”--格里·萨斯曼
employee类不是真正的Employee。它模拟了一个真实的员工。我们知道,该模型不能捕获真实员工的所有信息,这不是它的重点。它只是为了捕获当前上下文中我们感兴趣的内容。
不同的领域可能对建模同一事物的不同方式感兴趣。例如,薪资部门和人力资源部门可能会以不同的方式对员工进行建模。
什么是域模型?
域的模型。
什么是领域驱动设计(DDD)?
它是一种非常重视领域模型并将其连接到实现的开发方法。DDD是由Eric Evans创造并最初开发的。
精选自here
https://stackoverflow.com/questions/5325836
复制相似问题