按照一般的项目管理过程,“需求”之后是“分析”,那么在分析阶段对应的技术流程又是哪个?如何将需求阶段和分析阶段联系起来呢?答案就是“领域模型”
什么是“领域模型”呢?只要抓住“领域(Domain)”二字就可以理解,也就是说领域模型是帮助我们理解相关领域知识的模型。
进一步来问:为什么需要领域模型?前面不是有“用例模型”吗,看起来用例模型好像就是描述相关领域知识的,是否完成用例模型就可以进行设计了?
如果你曾经写过用例文档,或者仔细看过用例文档,那么你肯定知道“用例”本身和“面向对象”、“类”这些都没有关系,用例就是纯自然的语言(比如英语、汉语)写的,因为用例实际上由客户口述给我们、然后由我们形成文档化的用例文档,客户才不管我们是什么面向对象还是面向过程还是阿猫阿狗的。
因此,单纯从用例来看,是没有类的概念的,无法完成从自然语言到面向对象语言的转换。但是,既然我们已经完成了用例模型,那么就必须基于用例模型进行分析(否则用例模型岂不是白做了),而“领域模型”就是自然语言向面向对象语言的一座桥梁。
让我们来看看“领域模型”阶段我们要做什么、该怎么做。其实很简单,简单概括就是“找名词”,分为四个步骤:(1)找出用例模型中的名词,(2)然后识别这些名词本身的相关信息,(3)以及名词之间的相互关联关系,(4)用UML画出领域模型。
我们来看在“用例模型”章节中的POST用例如何得出领域模型。
第一步:找出用例模型中的名词
原有用例如下,用蓝色加黑标出名词(重复的就不标了):
1)顾客携带商品到收银台;
2)收银员扫描商品条形码;
3)系统根据条形码获取并显示商品信息;
4)收银员重复2~3步,直到所有商品扫描完毕;
5)系统计算商品总额;
。。。。。。。。。。。。。。。。。。。。
n)系统打出商品清单,完成交易。
这个用例中的名词有“顾客”、“商品”、“收银台”、“收银员”、“商品条形码”、“系统”、“商品信息”、“商品总额”、“商品清单”、“交易”。稍加整理:
1)“顾客”、“收银员”是系统的外部对象,不需要我们进行设计,但这些对象要和系统进行交互;
2)“商品”、“商品条形码”、“商品信息”、“商品总额”、“商品清单”、“交易”是领域对象,但“商品条形码”、“商品信息”可以算作“商品”的属性、“商品总额”可以算作“交易”的属性,最后从这个用例总结出来的领域对象有“商品”、“商品清单”、“交易”三个。
第二步:识别这些名词本身的相关信息
一个对象的属性可能分布在多个用例中,因此可以通过迭代不断的完善一个对象的属性,大家可以看到,我们在第一步中的样例就已经分析了一部分了:“商品条形码”、“商品信息”可以算作“商品”的属性。
对象除了属性外,还有一些约束或者限制,这些在用例中可能有,也可能没有,这就需要分析人员来发现了。比如说交易金额必须大于0.1元小于99999元这种约束,用例中不一定会体现,可能需要分析人员向客户咨询。
第三步:识别对象间的关系
面向对象设计就是依靠对象间的互相协作来配合完成相应的功能,因此识别出对象和对象本身的属性外,还要识别对象间的关系,例如1对多、1对1、依赖等,详细的各种关系可以参考UML的标准定义。
我们以第一步识别的三个对象为例:“商品清单”包含多个“商品”、一次“交易”对应一个“商品清单”、一个“商品”只能属于一个“交易”等。
第四步:画出领域模型UML图
UML这里就不啰嗦了,我们结合前三步的分析,画出这个样例的UML领域模型图:
(由于CSDN关闭了图片上传功能,因此无法贴出,大家可以根据前三步自己画一个)
大家可以看到,经过“领域模型”的分析后,已经完成了自然语言到面向对象语言的初步转化了,领域对象已经识别出来,面向对象已经初具雏形。
需要提醒的是:领域模型过程中识别出来的对象和具体的语言无关,也没有方法。换句话说,public、private、函数这些面向对象的属性在领域模型阶段不需要分析出来。
分享到:
相关推荐
为了达到这一目的,建立合适的领域模型至关重要。领域模型不仅帮助我们更好地理解业务逻辑,而且还能促进团队成员之间的有效沟通,确保软件设计与实现能够真正符合业务需求。 #### Martin的分析模式介绍 Eric ...
2. **确定业务问题**:在建立模型前,需要深入理解业务流程,识别关键业务需求,确定需要在模型中体现的关键元素。 3. **创建概念模型**:根据业务需求,将实体、属性和联系组织起来,形成一个完整的概念模型,这有...
【基于阿克曼转向梯形的转向模型】是汽车转向系统设计中的一个重要概念,尤其在电动汽车和舰载机牵引车领域。阿克曼转向梯形是根据车辆前轮和后轮之间的几何关系建立的一种理想转向模式,以确保车辆在转弯时内外轮的...
在成熟度评估模型方面,我们可以借鉴能力成熟度模型(CMM)的概念,将其应用于数据治理、数字化转型等多个领域。数据治理成熟度模型,如CMMI、DCMM、DCAM和MD3M,通过多个层次和评估指标来分析企业数据管理的现状和...
在Revit模型转JSON的过程中,通常是为了提取模型中的几何信息、属性数据以及结构信息,例如墙体、楼层、梁、柱等元素的坐标、尺寸、材质等。JSON文件可以作为接口,与其他软件或服务进行集成,比如进行可视化渲染、...
在深度学习领域,模型的可移植性和互操作性是至关重要的。GluonCV是Apache MXNet框架下专门用于计算机视觉任务的一个强大库,它提供了大量的预训练模型和实用工具。然而,有时我们可能希望在更广泛的社区中使用的...
为了满足特定元件模型的需求,PSPICE提供了Model Editor这一工具,允许用户根据元件供应商提供的数据手册(Datasheet)自行建立元件的仿真模型。这种方法对于一些不常见或特殊用途的元件尤其重要,因为PSPICE标准库...
在Simulink中建立主动转向模型,需要考虑电动机控制策略、反馈控制算法以及与车辆动态模型的接口。 被动转向,顾名思义,是指驾驶员通过方向盘直接控制车轮转向的传统方式。在CarSim中,可以建立基于经典力学的被动...
总之,永磁同步电机的数学模型建立与仿真是一项复杂但至关重要的任务,它涉及到电气工程、控制理论等多个领域。掌握这一技能,能够帮助我们设计出更高效、更可靠的电机系统。在实践中,不断优化模型和仿真方法,对于...
本文将深入探讨如何利用ADS来建立电感和变压器模型,包括单端、差分、巴伦结构等不同配置,以及各种几何形状和参数的调整。 首先,基础的螺旋电感设计涉及几个关键参数:外径D、金属宽度W、相邻线圈之间的间距S、...
在实际应用中,基于MATLAB的控制系统模型的建立可以广泛应用于电厂自动控制、机器人控制、过程控制等领域。通过建立控制系统的数学模型,可以对系统进行分析和设计,提高系统的稳定性和可靠性。 基于MATLAB的控制...
在车辆动力学领域,建立车辆模型是理解和设计车辆控制系统的基础。3自由度(3DOF)整车模型是一种简化的数学模型,它捕获了车辆在横向、纵向和垂直方向上的关键运动特性。在这个模型中,车辆被视为一个质点,考虑三...
【描述】: 本文探讨了在信息化时代背景下,建立机械零部件虚拟模型库的必要性和重要性。通过虚拟模型库,可以提升教学效果,促进学生从被动学习转向主动学习,同时在机械工程领域也有广泛应用。 【标签】: 虚拟模型...
"RLSJ.c"可能是基于递归最小二乘算法(Recursive Least Squares Algorithm, RLS)的转动惯量辨识算法源代码,而"JRLSsuc.mdl"则很可能是MATLAB Simulink环境中建立的仿真模型,用于实现这一算法并进行电机转动惯量的...
在IT行业中,尤其是在地质建模和工程分析领域,利用计算机软件进行三维模型的构建是非常重要的。本主题聚焦于如何利用DXF文件创建3DEC模型,这是一种适用于岩土工程和地质灾害分析的数值模拟工具。DXF(Drawing ...
本文将详细解析如何建立类模型和状态模型,并探讨在实验二中的具体实践。 首先,建立类模型的目标是识别和定义系统中的核心元素,包括类、属性、操作和关联。类是系统中具有共同特征的对象集合,它们可以是物理实体...