大明湖畔的领域模型

简介: 不管在做系统分析,还是系统设计时,我们大概率都会提到领域模型这个词,奇妙的是虽然大家都在谈论领域模型,但每个人心中都有一份对领域模型的认知。套用DDD,我们需要统一语言,首先需要对“领域模型”有一个统一认知。达成共识。你可以暂时挂起大脑进程,想想:“领域模型是什么?怎么描述?”世事万物都在变化中发展,就如同“手机”,十年前和现在,人们对它的认知也是不一样的。所以我们一起回顾一下最原始的“领域模型”是什么,你是否记起大明湖畔的领域模型。“领域模型”最早流行于OOA中,简单回顾一下OOA/D

不管在做系统分析,还是系统设计时,我们大概率都会提到领域模型这个词,奇妙的是虽然大家都在谈论领域模型,但每个人心中都有一份对领域模型的认知。

套用DDD,我们需要统一语言,首先需要对“领域模型”有一个统一认知。达成共识。

你可以暂时挂起大脑进程,想想:“领域模型是什么?怎么描述?”

世事万物都在变化中发展,就如同“手机”,十年前和现在,人们对它的认知也是不一样的。所以我们一起回顾一下最原始的“领域模型”是什么,你是否记起大明湖畔的领域模型。

“领域模型”最早流行于OOA中,简单回顾一下OOA/D

OOA/D

分析:强调的是对问题和需求的调查研究,而不是解决方案。例如,如果需要一个新的在线交易系统,那么,应该如何使用它?它应该具有哪些功能?

设计:强调的是满足需求的概念上的解决方案,而不是实现。例如,对数据库方案和软件对象的描述。设计思想通常排斥底层或“显而易见”的细节。最终设计可以实现,而实现则表达了真实和完整的设计。

分析和设计可以概括为:做正确的事和正确地做事

OOA:强调在问题领域内发现和描述对象(或概念)。例如,在航班信息系统里包含飞机、航班和飞行员等概念。

OOD:强调的是定义软件对象以及它们如何协作以实现需求。例如,软件对象Plane可以有tailNumber(飞机唯一标识)和getFightHistory方法(飞行过的航班)

领域模型

领域模型是OOA中最重要的和经典的模型。

定义

领域模型是对领域内的概念类或现实世界中对象的可视化表。也称为概念模型、领域对象模型和分析对象模型。

不是描述软件类、软件架构领域层或有职责软件对象的组图。

Why

为什么需要领域模型?去掉修饰语,为什么需要模型,这在DDD系列文章中已经解释:模型是对业务复杂度的简化和提炼。帮助我们更好地理解业务。

同理领域模型能够使我们理解关键概念和业务知识。

我们在设计和实现时,软件类名称也大多源于领域模型的名称,以使对象具有源于领域的信息和职责。

image.png

这样可以降低我们思维与OO建模之间的表示差异

How

如何创建领域模型?

1.寻找概念类2.将其绘制为UML类图中的类3.添加关联和属性

寻找概念类

根据领域模型定义,需要先找到概念类。

概念类是思想、事物或对象。可以从其符号、内涵和外延考虑。

符号:表示概念类的词语或图形

内涵:概念类的定义

外延:概念类所适用的一组示例

image.png

考虑购买交易事件的概念类。

可以使用符号Sale对其命名。

Sale的内涵陈述为“表示购买交易的事件,并且具有日期和时间”

Sale的外延是所有销售的例子,或者说是世界上所有销售实例的集合

描述类图

领域模型描述的信息可以采用纯文本方式表示。

但是在可视化语言中更容易理解这些术语,特别是它们之间的关系,因为我们的思维更擅长理解形象的元素和线条连接。

在应用UML时,领域模型被描述为一组没有定义操作的类图。

关联

关联是类之间的关系,表示有意义和值得关注的连接。

关联能够满足当前所开发场景的信息需求,并且有助于理解领域。

image.png

关联被表示为类之间的连线,并冠以首字母大写的关联名称。

关联末端可以包含多重性表达式,用于指明类的实例之间的数量关系。

关联本质上是双向的,方向箭头只是为了方便阅读,默认是从左往右。

总结

没有所谓唯一正确的领域模型。所有模型都是对我们试图要理解的领域的近似。

领域模型主要是特定群体中用于理解和沟通的工具。

有效的领域模型捕获了当前需求语境下本质抽象和理解 领域所需要的信息,并且可以帮助理解领域的概念、术语和关系。


目录
相关文章
|
7月前
|
程序员 数据库 uml
领域驱动设计-让程序员心中有码(九)
领域驱动设计-让程序员心中有码(九)
|
设计模式 架构师 程序员
DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道
虽然身为架构师,设计一个高质量的架构依然是复杂与困难的。 简单来说,动用大量的资源只为了一套优质的三高架构并不正确,而是该在了解当前业务现状的情况下,创造出灵活、可维护、健硕能成长的。
|
架构师 算法 测试技术
小团队也能做DDD-中篇
小团队也能做DDD-中篇
243 0
|
设计模式 容器
领域驱动设计总结——如何发掘深层次模型
本文为领域驱动设计系列总结的第四篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。本文主要介绍在领域驱动设计中如何发掘深层次模型。
306 0
|
编译器 领域建模 Scala
代数数据类型与领域建模
代数数据类型与领域建模
|
Java 领域建模 数据库
为什么我们需要正确地领域建模
为什么我们需要正确地领域建模
|
缓存 监控 中间件
大白话之辩论DDD,阿里面试中台化理解
我在最近一年经常听到大家在讨论DDD,而且议论纷纷,大家各抒己见。 比如说在某技术微信群讨论,有些人说DDD是噱头,为了搞个业绩(又不是不能跑 😉),还有些表示自己是CRUD Boy 不知道DDD是什么高大上东西。 接下来我用大白话来表达我对DDD的看法。
360 0
大白话之辩论DDD,阿里面试中台化理解
|
设计模式 数据处理
【参与评论有奖】把书读薄 | 《设计模式之美》总结篇(下)
从六月开始,断断续续,算是把王争的《设计模式之美》看得差不多了,实战部分没来得及看,不过也是获益良多,思维方式上的一些变化。肚子里的墨水不多,不知道如何描述这种感觉,说两个实际的应用场景,读者自行意会哈,顺便带出总结思维导图~
230 0
|
设计模式
【参与评论有奖】把书读薄 | 《设计模式之美》总结篇(上)
从六月开始,断断续续,算是把王争的《设计模式之美》看得差不多了,实战部分没来得及看,不过也是获益良多,思维方式上的一些变化。肚子里的墨水不多,不知道如何描述这种感觉,说两个实际的应用场景,读者自行意会哈,顺便带出总结思维导图~
240 0
|
设计模式 移动开发 前端开发
怎么说服领导,能让我用DDD架构肝项目?
我也苦思冥想,怎么跟领导说咱们从 MVC 升级到 DDD 吧,因为 DDD 代码结构更加清晰、领域驱动比测试驱动开发更加先进、研发的兄弟们也更想用用新框架等。
382 0
怎么说服领导,能让我用DDD架构肝项目?

热门文章

最新文章