【注】本文译自: https://www.geeksforgeeks.org...
领域驱动设计(Domain-Driven Design)是程序员 Eric Evans 于 2004 在他的《 领域驱动设计:解决软件核心中的复杂性》一书中提出的一个概念。
这是一种自顶向下的软件设计方法。首先,让咱们尝试重点介绍一下在这种状况下领域的含义。程序员
在软件开发的上下文中,“域”指的是业务。在应用程序开发过程当中,一般使用术语域逻辑或业务逻辑。基本上,业务逻辑是应用程序逻辑所围绕的知识领域。 应用程序的业务逻辑是一组规则和指导原则,用于解释业务对象应如何相互交互以处理建模数据。
注意:
软件工程领域的领域是要在其上构建应用程序的业务。编程
假设咱们的软件已经使用了全部最新技术堆栈和基础设施,这样的软件设计架构很是棒,可是当咱们在市场上发布这个软件时,最终仍是要由最终用户来决定咱们的系统是否优秀。另外,若是系统不能解决业务需求,对任何人都没有用处;无论它看起来有多漂亮,或者它的基础设施有多好。根据 Eric Evans 的说法,当咱们在开发软件时,咱们的重点不该该主要放在技术上,而应该主要放在业务上。记住:设计模式
“客户的工做不是知道他们想要什么“---史蒂夫·乔布斯
领域驱动设计涉及两种设计工具,一种是战略设计工具,另外一种是战术设计工具。程序员或开发人员一般处理战术设计工具,但若是咱们有战略设计工具的知识和良好的理解,它将帮助咱们构建好的软件。
Spring 数据家族下的大多数框架都是根据领域驱动的设计方法构建的。架构
战略设计工具帮助咱们解决全部与软件建模相关的问题。它是一种相似于面向对象设计的设计方法,在面向对象设计中,咱们被迫从对象的角度思考问题。在战略设计方面,咱们被迫从环境的角度来思考。框架
咱们能够把这个词看做是一个英语单词,它指的是某一事件、事件、陈述或想法的状况,它的意思能够根据这些状况来肯定。
除了上下文以外,战略设计还讨论了模型、泛在语言和边界语境。这些是领域驱动设计的战略设计中经常使用的术语。让咱们逐一理解。dom
边界上下文:
指的是上下文的边界条件。它是对边界的描述,并充当一个阈值,在这个阈值中定义并适用于特定的域模型。工具
战术设计讨论实现细节,即建模领域。它一般会处理有界上下文中的组件。咱们可能据说过或使用过诸如服务、实体、存储库和工厂之类的东西。它们都是经过域驱动设计创造并流行的。战术设计过程发生在产品开发阶段。
让咱们讨论一些重要的战术设计工具。 这些工具是高级概念,可用于建立和修改域模型。spa
工厂和存储库:
工厂和存储库用于处理聚合。工厂帮助管理聚合生命周期的开始,而存储库帮助管理聚合生命周期的中间和末端。工厂帮助建立聚合,而存储库帮助持久化聚合。咱们应该老是为每一个聚合根建立存储库,而不是为全部实体建立存储库。
工厂是 GoF 的设计模式,工厂是有用的,但在聚合规则的上下文中不是强制性的。hibernate
经过通用语言减小了团队之间的沟通差距设计