领域建模概述

2023-10-30

0 概述

在软件工程中,有两个高阶的工作的分别是架构建模;如果把写代码比喻成施工,那么架构和建模就是设计图纸。相比编码,那么建模的确是对设计经验和抽象能力要求更高的一种技能。本文主要探讨一下对领域建模相关知识的理解。

1 什么是领域建模

1.1 什么是领域

维基百科给出的定义:A sphere of knowledge,influence, or activity. The subject area to which the user applies a program is the domain of the software[1];一个特定范围的知识、影响或者活动,这个主题域应用到程序上就是这个软件系统的领域。重点强调了特定范围,范围即边界;既然领域是用来限定业务边界和范围的,那么就会有大小之分,领域越大,业务范围越大;如下图所示子商务领域;电商领域是一个比较大的领域,通常的做法就是将问题一步一步地细分&拆解,再针对细分出来的子问题域,逐个深入研究,探索和建立所有的子问题域的知识体系。
在这里插入图片描述
案例:
在这里插入图片描述
那到底是穿多还是穿少呢?如果说场景是在一个炎热的夏天或者寒冬腊月

1.2 什么是领域模型

定义**:领域模型**(domain model)是对领域内的概念类或现实世界中对象的可视化表示,也称他为概念模型分析模型。领域模型是问题域模型;值得强调是领域模型这一术语是多义的,也用来表示软件对象的领域层,在表示层或者UI层之下的软件对象层是由领域对象组成;领域对象是表示问题域空间事物的软件对象,并且与业务逻辑或领域逻辑方法相关[2]。定义关键点:1)“领域内”,领域是特定范围,即边界,也就是说领域模型是针对某个问题域而言;脱离特定边界与范围领域模型是没有意义的。2)领域模型是抽象的,不是对某个问题的各个相关方面的一个映射,也不是解决方案的构建。
如下图所示,汽车领域模型表示;值得说明的是:这个模型是对真实世界的问题域描述,反映的是问题空间的本质理解,不是对软件设计的描述,它和技术无关
在这里插入图片描述

不难发现在解决方案空间的领域模型和概念模型命名上差不多,但是它们不是一回事,但是前者对后者名称和定义有着启发的作用;这样好处是可以减小我们思维与软件模型之间的表示差异。从上面的案例不难看出,领域模型的好处:1)简化了认知,统一思想,避免开发人员与业务方的认知差异;2)易于知识的传递。

1.3 什么是领域建模

在理解领域建模之前,我们先思考下软件开发的本质,软件开发本质就是从从问题空间到解决方案空间的一个映射转化,如下图所示。在问题空间中,就是系统要解决的的领域问题(找出某个业务面临的挑战以及相关用例的分析);在解决方案空间中,则是通过具体的技术工具手段进行设计实现。
在这里插入图片描述

定义:领域建模也叫业务建模,是针对我们需要解决的问题空间,使用特定的方法,进行抽象,分析,并产出业务概念模型的过程。值得强调的是领域建模首先是一个定义问题方法,其次才是解决问题的方法。我们很容易理解解决问题带来的价值,很容易忽略定义问题的力量。要想有效定义问题,就要从业务出发,首先尝试在业务中寻找简化问题的可能性,然后在技术中寻找对应的解决方案。

1.4 模型不能代替现实

模型毕竟是模型,不能代替现实;建模的过程与建模者的观察角度和对问题认知有直接关系,所以我们要从认知的角度和发展的眼光去看待模型。如下图所示科学发展过程是一个不断否定和逐步求精的过程。
在这里插入图片描述
模型在软件开发中作用也类似,我们也要用发展的眼光来看待模型,没有一步到位,建模也要符合问题发展的阶段和背景;随着业务的和认知的提升,模型也要不断升级,确保它能够跟上我们对问题域最新理解。如下图TCP发展历程,也是一个不断演进的过程。
在这里插入图片描述

2 为什么要学习领域建模

2.1 从个人发展来看

武侠⼩说中的武功分为剑法(招式)和内功,内外兼修才是王道! 技术就像武功,编程语⾔和框架这些都是剑法,领域建模就是所谓的内功⼼法。
在这里插入图片描述

2.2 从业务系统开发来看

领域模型对于业务系统是更好的选择,我们知道软件开发的核心难度在于处理隐藏在业务知识中的复杂度,这种复杂度是必然的复杂度,而模型就是对这种复杂度的简化与精炼。 DDD作者Eric倡导的领域驱动设计是一种模型驱动的设计方法:通过领域模型捕捉领域知识,使用领域模型构造更易维护的软件。如下图所示,在软件行业发展的早期,人们习惯将将问题转化为与具体领域的无关的模型(堆、栈、链表、树、图等数据结构)并解决了大量的基础软件的问题。究竟是将问题转化业务强相关还是与具体问题无关,这个关键的差异体现在人上,对于业务软件而言,从业务出发去构造与业务强相关的模型,是一种更好的选择

在这里插入图片描述

3 领域建模的难点

业务建模很多种,常用有以下几种

  • E-R
  • OOA/OOD
  • DDD
    业务建模难度本身不在于使用建模方法本身,真正的难点
  • 清晰的定义的业务问题,并让所有干系人都能接受你对业务问题定义。这里所说的定义业务问题:是指对业务问题的梳理和总结,明确对业务的影响以及产出。需要提炼和总结,并通过所选用的业务建模方法中蕴含的逻辑框架去验证它。这里挑战就不仅仅是建模的本身了,而在于如何获取业务方的信任,并展开有效的讨论。
  • 在特定架构约束下,将模型实现出来。我们在学习建模方法时候,往往会不自觉的忽略架构对模型的影响。于是可能大概率会出现一种现象:学会了一种建模方法,却因为不知道怎么处理架构约束,而无法将其应用到实际工作中。

4 总结

领域建模给人的感觉就是一学就会,一用就废;主要原因大家缺少实践;所以要想真正学好领域建模,必须要知行合一。

参考文献
【1】https://en.wikipedia.org/wiki/Domain_(software_engineering)
【2】uml和模式应用(第三版),机械工业出版社。
【3】https://en.wikipedia.org/wiki/Conceptual_model_(computer_science)
【4】https://time.geekbang.org/column/intro/100082101?tab=catalog
【5】实现领域驱动设计
【6】代码精进之路:从码农到工匠,张建飞
【7】解构领域驱动设计

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

领域建模概述 的相关文章

  • matlab实现kmeans聚类算法

    kmeans聚类算法是一种简单实用的聚类算法 matlab自带函数kmeans可直接对数据进行kmeans聚类 为了方便更好地掌握kmeans聚类算法 今天我们自己来实现一个弱化的版本mykmeans mykmeans输入包含三项 分别为聚
  • 数学建模_论文写作要求

    标题 副标题 基于XX 模型 方法 对xx的问题研究 可加副标题 xxx gt 三号黑体字 一级标题 四号黑体 居中 二级 三级标题 小四黑体 左对齐 其他字体 小四宋体 行距用单倍行距 设置文字时先选择样式再调整样式 总页数在25 35之
  • 基于.NET的企业级软件开发

    企业级开发最好基于一些成熟的框架 从而将主要精力集中到领域模型的设计上 1 UI与业务逻辑的隔离 在web领域可以采用ASP NET MVC框架 2 业务逻辑与DB的隔离 可以采用Entity Framework框架 3 业务逻辑中涉及工作
  • 建模杂谈系列225 小结与反思

    说明 一个项目结束了 趁这两三天在休息 把本次的收获和教训都盘点一下 然后再开始一个更刺激的项目 短暂的停顿 是为了把过去一段时间辛苦的成果固化一下 把那些很容易消散的宝贵知识和经验可以给未来做决策工具 内容 1 事实 这是在疫情之后做的第
  • 相关性模型与回归模型(例题代码)

    一 相关性模型 SPSS 相关性模型涉及到两种最为常用的相关系数 皮尔逊person相关系数 斯皮尔曼spearman等级相关系数 1 皮尔逊相关系数 相关性可视化 总结 1 如果两个变量本身就是线性的关系 那么皮尔逊相关系数绝对值大的就是
  • 领域建模概述

    0 概述 在软件工程中 有两个高阶的工作的分别是架构和建模 如果把写代码比喻成施工 那么架构和建模就是设计图纸 相比编码 那么建模的确是对设计经验和抽象能力要求更高的一种技能 本文主要探讨一下对领域建模相关知识的理解 1 什么是领域建模 1
  • 【金融申请评分卡】目标变量界定

    一 目标变量是什么 目标变量就是假定申请客户的好坏 逻辑回归公式里的Y 先来看下逻辑回归公式 y 11 e z y 1 1 e z
  • 数学建模常用模型简介&其他模型大全汇总

    一 预测与预报 1 灰色预测模型 必掌握 解决预测类型题目 由于属于灰箱模型 一般比赛期间 不优先 使用 满足两个条件可用 数据样本点个数少 6 15 个 数据呈现指数或曲线的形式 2 微分方程预测 高大上 备用 微分方程预测是方程类模型中
  • SVM支持向量机的多输入单输出预测模型

    多输入单输出 使用SVM做预测的时候 涉及到数据处理 这里强调一下 其它预测算法也适用 我们经常将收集数据集进行归一化 标准化 其实 只需要对部分数据进行归一化即可 归一化的目的是将输入向量中的各属性之间的数量级拉近 如果量级相差过大会影响
  • Python 流体动力学层流建模

    使用单相层流的有限差分法求解二维 Navier Stokes 方程 纳维 斯托克斯方程 并使用基准盖腔测试验证结果 介绍 在许多自然现象中都可以观察到流体流动 从舒缓的瀑布到计算机键盘上令人恼火的咖啡飞溅 看到损坏的键盘上的咖啡后 您的第一
  • 3D游戏建模怎么接外包

    3D游戏建模怎么接外包 有些自学出来或者经过培训小伙伴 已经有能力做出作品时往往都想着怎么去赚钱 除了从事于建模行业的工作之余 身为大学生 可能在校的时间较为富裕 课余时间 能够接私单 赚点外快什么的也是能够的 接单的平台 八戒网 1个较为
  • K-近邻法分类(KNN)

    一 K 近邻法分类 MATLAB K 近邻法 KNN X 训练样本 x 待判样本 K 近邻数目 flag1 记录K个最近邻中属于第一类的个数 flag2 记录K个最近邻中属于第二类的个数 clear close all N 150 X ra
  • MATLAB数据关联性(相关性)分析

    分析某个因素与其它因素之间的关联强弱 举个例子X0 X1 X2 X3 X4 X5分别代表热效率 煤气流量 空气流量 热值 蒸汽流量 给水流量 这里分析X1 X2 X3 X4 X5与X0的关联度 定义如下 图片摘自知乎 X0 xlsread
  • 什么是面向对象的设计思想?

    什么是面向对象的设计思想 什么是面向对象的设计思想 也许有不少初学者对这个概念还有许多不明白的地方 特别是这个处于新旧思想交替的时代 许多人刚刚学完现在看来是快要淘汰的只是面向过程的 语言 他们的脑子还没有脱离面向过程思想的束缚 抬头却发现
  • [从零开始学习FPGA编程-22]:进阶篇 - 架构 - FPGA内部硬件电路的设计与建模

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是数字硬件电路 1 1 什么是硬件电路
  • 用R建立岭回归和lasso回归

    1 分别使用岭回归和Lasso解决薛毅书第279页例6 10的回归问题 例6 10的问题如下 输入例题中的数据 生成数据集 并做简单线性回归 查看效果 cement lt data frame X1 c 7 1 11 11 7 11 3 1
  • 如何使用Blender建3D汉字(保姆级别的详细)

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于建模的学习笔记 本篇是如何使用Blender建3D汉字 这是这个专栏的第一篇 因为不知道把这篇放到哪里 就开了个新的 如何使用Blender建3D汉字 就这种的 如果是的话可以接着往下
  • 2019年“华为杯”研究生数学建模比赛总结

    前言 参加数学建模比赛是学习生涯甚至是人生的一次难忘的经历 不管是比赛过程还是最终的结果 无论最终结果如何 自我学习生涯至今 在研究生期间参加一次数学建模更重要的是我对数学建模比赛的一种情怀 回想本科期间参加数学建模竞赛 从校赛到省赛 再到
  • 建模杂谈系列231 对象化-学习型对象

    说明 简单归纳一下最近的学习型对象封装 做一个基类 之后可以基于这个基类继续迭代 内容 1 关于字典的格式 Python的字典格式写起来太麻烦了 所以我定义了一个简单对象 来取代字典 字典的赋值方式 a dict a dict abc 1
  • 微分方程(人口预测与传染病模型)

    一 定义 微分方程 含导数或微分的方程 微分方程的阶数 所含导数或微分的最高阶数 如y 2y 2x 0是三阶微分方程 微分方程的解 使得微分方程成立的函数 例如y 2x 0的解可以为x 或者x 1 微分方程的通解和特解 特解为满足等式条件即

随机推荐

  • msvcr120.dll丢失怎样修复,学这三招就可以修复好

    年前才买的新电脑 今天在打开软件ps软件的时候 电脑就提升msvcr120 dll文件丢失 无法执行此代码 刚刚开始以为是电脑的系统没有装好 经过我一下午时间的研究 原来是电脑msvcr120 dll文件丢失一般都是下载到垃圾软件 导致ms
  • Linux 临时增加环境变量

    增加环境变量 export name value 改变PATH环境变量 export PATH value PATH 这种方法只能临时增加环境变量 关闭shell窗口再打开就失效
  • 如何制作启动盘U盘(纯净版无捆绑)

    如何制作启动盘U盘 纯净版无捆绑 第一步 进入网站下载最新的镜像文件 网站地址 https msdn itellyou cn 如图所示 找到需要下载的展开详细信息 把链接复制下来 打开迅雷软件 会弹出下载链接界面 第二步 下载 rufus
  • CAS和多线程密切相关的东西!

    compare and swap 寄存器A的值和内存M的值进行比较 如果值相同 就把寄存器B和M的值进行交换 更多的时候 不关心寄存器中的数量是啥 更关心内存的数值 变量的值 CAS相当于是把开了新世界的大门 让咱们不加锁就能保证线程安全
  • Linux 搭建 MariaDB Galera Cluster 高可用集群

    MariaDB Galera Cluster 集群介绍 MariaDB Galera Cluster 下文简称MGC集群 是一套在MySQL innodb存储引擎上面实现多主 数据实时同步以及强一致性的关系存储架构 业务层面无需做读写分离工
  • rtklib中的基线约束应对观测条件糟糕的GNSS数据

    文章目录 问题 观测数据质量很差 使用基线约束后和约束前的结果对比 基线约束的原理 问题 观测数据质量很差 最近遇到一个难题 采集了500小时的数据 可是只有大约50 的的数据可以解算 呃 基线长度大约5公里 也算不上长基线 对这批数据进行
  • 串的模式匹配算法-BF算法+KMP算法

    BF算法 include
  • Spring Boot 中的 KafkaTemplate 是什么,原理,如何使用

    Spring Boot 中的 KafkaTemplate 是什么 原理 如何使用 Kafka 是一个流行的分布式消息系统 它可以用于在应用程序之间传递消息 Spring Boot 提供了对 Kafka 的支持 我们可以使用 Spring B
  • org.springframework.beans.factory.UnsatisfiedDependencyException异常问题的解决

    最近学了IDEA和SpringBoot MyBatis了 正所谓学以致用 于是用所学的来做项目 单元测试时报了下面的异常 Caused by org springframework beans factory UnsatisfiedDepe
  • WPF 在XAML中通过控件事件改变另一控件属性

    使用WPF进行开发 很多时候是要注意UI和后台代码的分离 尤其是要改变WinForm中的事件驱动机制 可是近期的开发遇到了这样一个问题 就是当一个控件的事件触发时 改变同级别的另一控件的属性 文字能力实在单薄 还是通过具体例子来说吧 首先
  • 深度学习训练模型的硬件条件

    之前热衷于学习理论知识 目前想跑代码了发现不知道从何下手 自己电脑上搭建的平台基本就是个摆设 因为跑不起来呀 今天我们就来看看想做深度学习应该怎么下手 首先了解下基础知识 1 深度学习用cpu训练和用gpu训练的区别 1 CPU主要用于串行
  • linux 上运行jxbrower出现的问题

    最近做了一个jxbrower抓取微信公众号文章的程序 想着挂在linux上定时运行 布上去却有几个问题这边总结一下 我得服务器是ubuntu16版本的 1 在linux无桌面的版本运行需要用x server运行 2 就是linux的Chro
  • L2-1 包装机PTA

    一种自动包装机的结构如图 1 所示 首先机器中有 N 条轨道 放置了一些物品 轨道下面有一个筐 当某条轨道的按钮被按下时 活塞向左推动 将轨道尽头的一件物品推落筐中 当 0 号按钮被按下时 机械手将抓取筐顶部的一件物品 放到流水线上 图 2
  • qt中drawline函数的参数_Qt--基础图形绘制

    一 基础图形绘制 A Qt图形系统中的关键角色 QPainter Qt中的画家 能够绘制各种基础图形 拥有绘图所需的画笔 画刷 字体 QPaintDevice Qt中的画布 画家的绘图板 所有的QWidget类都继承自QPaintDevic
  • (小白学java)Java 循环结构

    Java中有三种主要的循环结构 while 循环 do while 循环 for 循环 while 循环 和c很像了 不多写了 public class demo public static void main String args in
  • Javascript设计模式-10-迭代器模式

    Javascript设计模式 10 迭代器模式 简介 提供一种方法 顺序访问一个聚合对象中各个元素 而又不需要暴露该方法中的内部表示 迭代器模式可以把迭代的过程从业务逻辑中分离出来 在使用迭代器模式之后 即使不关心对象的内部构造 也可以按顺
  • 个人养老话题

    中国家庭的财富保卫战有三大战场 1 生娃 2 买都市圈里的好房子 3 买好股 好基
  • 【RSA】RSA加密、解密、签名与验证

    前言 最近要做iOS SDK的联网授权 涉及到数据安全验证 因此想到使用RSA进行签名和验证 授权主要流程如下 1 客户方前往我方开放平台注册授权 得到AppId和AppSecret 2 客户方集成SDK 调用Register接口传入App
  • 【数据采集】获取网站数据(二)

    获取网站数据 二 1 常用的数据采集python库 Beautiful Soup https www crummy com software BeautifulSoup bs4 doc zh pyspider http docs pyspi
  • 领域建模概述

    0 概述 在软件工程中 有两个高阶的工作的分别是架构和建模 如果把写代码比喻成施工 那么架构和建模就是设计图纸 相比编码 那么建模的确是对设计经验和抽象能力要求更高的一种技能 本文主要探讨一下对领域建模相关知识的理解 1 什么是领域建模 1