领域驱动设计及其优点介绍 - DEV社区

19-07-25 banq
    

应用可以使用最新的技术开发,使用最新的技术并具有最佳的界面等,但如果它不能解决业务需求,那么它就不会被认为是有用的。这就是领域驱动设计(DDD)的用武之地。正如其名称所述,这里的重点是关注特定业务的领域。

事实上,要设计一个好的软件,了解该软件的用途非常重要。要创建银行软件系统,您需要充分了解银行业务的内容,必须了解银行业务领域。

什么是领域驱动设计?

在软件开发中,领域驱动设计方法用于复杂需求,将实现连接到核心业务概念的演化模型。它将重点放在问题域上,基本上有助于识别架构并告知软件需要复制的机制。

DDD具有战略价值,它将业务领域概念映射到软件工件中。它是关于使用相同的普通,统一的语言来组织与业务问题一致的代码工件。

DDD不是一种方法论,它更多的是关于软件的架构设计,提供一种实践结构来做出有助于软件项目复杂领域的设计决策。

DDE方法由Eric Evans在“域驱动设计:处理软件核心中的复杂性 ”一书中介绍。Apiumhub的每个开发人员都已阅读它,绝对建议您阅读它!

领域驱动设计侧重于:

  1. 核心域和域逻辑
  2. 域模型的复杂设计
  3. 通过与领域专家合作,改进应用程序模型并解决与领域相关的新兴问题  

DDD包含通用统一语言,技术和模式以及架构。重点放在业务和模拟试图解决的问题上。

使用DDD,开发人员可以获得有助于最大限度地降低复杂性的技术,并有助于推动与其他人的协作。我们的想法是使用需求语言,或使用业务本身使用的相同语言将业务流程映射到模型中。

一些用于DDD的常用术语

统一语言

在这里,我们讨论了所有团队使用的语言,以便将团队的所有活动与软件连接起来。无处不在的DDD语言有助于更多地了解业务专家使用的术语。技术团队能够知道语言是否发生变化以及特定术语是否会用于不同的含义。

1.上下文 ,上下文是一个确定语句含义的设置。

2.上下文映射, 将上下文连接在一起的形式。对于您找到的每个上下文:一种语言,一个独立的实现以及与其他有界上下文交互的接口。

3.有界上下文, 有界上下文是泛在语言和相应模型有效的上下文。它使团队清楚地了解什么必须是一致的,什么可以独立发展。

4.模型,模型是描述域的选定方面的系统,通常用于解决与该特定域相关的问题。

强域模型的特征是什么?

  1. 对齐,借助业务模式,战略和流程。
  2. 隔离,隔离业务中域和和其他层
  3. 松散设计,不依赖于域层两侧的应用程序层
  4. 可重复使用,避免重复的模型
  5.  是一个抽象而干净的分层,使维护,测试和版本控制更容易。
  6. 对基础架构框架的最小依赖性,避免超出这些框架并在外部框架上紧密耦合
  7. 设计有“普通的旧Java对象编程模型”。没有任何技术或框架依赖

我们同意这是对DDD的简短而简短的介绍。本文的重点是了解什么是域驱动设计。我将给你留下DDD的主要好处列表,这些好处可能会让你对这个话题更加好奇! 

领域驱动设计的主要优点

1.以业务必须为导向

如您所知,在域驱动设计中,每个人最终都使用相同的语言和术语,团队正在共享模型。开发人员与业务团队进行更好的沟通,在为反映业务运营方式的模型建立解决方案时,工作效率更高,而不是软件如何运作。

2. 整个团队使用的一组通用术语和定义

团队在开发周期中发现沟通变得更加容易,因为从一开始,他们就专注于建立双方共同普遍存在的语言(开发和业务专家)。该语言与项目的领域模型相关联,技术方面通过所有理解的简单术语来引用。

3. 让跟踪变得容易  

不用说,如果每个人都使用相同的术语,跟踪需求实现变得非常简单。

4. 更好的代码

使用DDD,您最终会获得更易读的代码并减少重复。

5. 敏捷是一个标准

通过遵循迭代和增量的敏捷方法,DDD将领域专家的心理模型阐明为业务的有用模型。

6. 获得良好的软件架构

由于充分了解有界上下文,所有团队都能够了解某些集成的重要性,尤其是原因。这意味着您知道自己正在获得良好的软件架构。

7. 沟通很重要 

一般来说,DDD在帮助团队创建通用模型方面非常有用。然后,来自业务方和开发方的团队可以使用此模型来交流业务需求,数据实体和流程模型。

8.平衡的应用程序 

使用DDD,您可以围绕域的概念以及领域专家提供的建议进行构建。这意味着开发的应用程序确实代表了域所需的内容,而不是获得仅专注于UX和UI的应用程序,而忽略了其余的需求。最重要的是获得适合该特定领域的用户/受众的均衡产品。

9.继续关注解决方案

事实上,纯模型周围有清晰的界限,使开发人员能够将精力放在最重要的事情上,使他们能够专注于解决方案。

10.纯粹灵活

DDD基于面向对象设计的概念。这意味着域模型中的几乎所有内容都基于对象,因此将采用模块化和封装,使系统能够定期和持续地进行更改和改进。

 

    

2
abcaxyzx
2019-07-25 11:34

温故知新