大明湖畔的领域模型

简介: 不管在做系统分析,还是系统设计时,我们大概率都会提到领域模型这个词,奇妙的是虽然大家都在谈论领域模型,但每个人心中都有一份对领域模型的认知。套用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

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

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

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

总结

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

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

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


目录
相关文章
|
人工智能 安全 算法
AI与大数据:智慧城市安全的护航者与变革引擎
AI与大数据:智慧城市安全的护航者与变革引擎
371 1
|
自动驾驶 物联网 5G
毫米波技术及其在5G网络中的应用详解
毫米波技术及其在5G网络中的应用详解
1232 3
|
11月前
|
存储 固态存储 算法
文件系统中磁盘碎片整理
【10月更文挑战第8天】
260 2
阿里云如何变更网站负责人
阿里云如何变更网站负责人
431 2
|
缓存 索引 Python
Transformers 4.37 中文文档(十六)(1)
Transformers 4.37 中文文档(十六)
333 1
|
网络协议 Linux Shell
【linux网络(一)】初识网络, 理解四层网络模型
【linux网络(一)】初识网络, 理解四层网络模型
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
544 1
|
存储 前端开发 Java
JavaWeb:Request & Response
在JavaWeb开发中,Request(请求)和Response(响应)是非常重要的概念。它们分别代表着客户端向服务器发送请求和服务器向客户端返回响应的过程。Request对象是由服务器创建的,用于封装来自客户端的请求信息。它包含了请求的HTTP方法(如GET或POST),URL,请求头部、参数等信息。你可以通过Request对象获取客户端发送的表单数据、URL参数、HTTP头部和Cookies等。Response对象则是服务器用来向客户端发送响应的工具。它包含了HTTP状态码、响应头部和响应体等信息。你可以使用Response对象设置响应的状态码、设置响应头部
225 3
 JavaWeb:Request & Response
|
Shell iOS开发 MacOS
Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标
581 0
|
存储 缓存 网络协议
介绍一下什么是DNS,以及DNS基础原理
DNS(Domain Name System)是互联网中用于解析域名和IP地址的分布式数据库系统。它的作用是将人类易于记忆的域名(如www.example.com)转化为计算机能够理解的IP地址(如192.0.2.1)。
443 0