领域模型详解

领域模型详解学会了面向对象的语法 却依然写不出面向对象的程序 因此我们需要了解如何从需求分析到面向对象设计这样一个过程 一 什么是领域模型领域建模 从领域模型开始 我们就开始了面向对象的分析和设计过程 可以说 领域模型是完成从需求分析到面向对象设计的一座桥梁 nbsp 顾名思义 就是显示最重要的业务概念和它们之间关系 是真实世界各个事物的表示 现实世界的可视化抽象字典 而不是软件中各构件的表示 类 表示业务概念

学会了面向对象的语法,却依然写不出面向对象的程序,因此我们需要了解如何从需求分析到面向对象设计这样一个过程。

一,什么是领域模型

领域建模。 从领域模型开始,我们就开始了面向对象的分析和设计过程,可以说,领域模型是完成从需求分析到面向对象设计的一座桥梁。 

顾名思义,就是显示最重要的业务概念和它们之间关系,是真实世界各个事物的表示(现实世界的可视化抽象字典)而不是软件中各构件的表示。(类:表示业务概念,通常只包含重要属性,少甚至不包含操作;关联、泛化:表达概念之间的关系)领域模型是描述业务领域(业务实体)的静态结构

理论派观点:

  • Domain Model是一个商业建模范畴概念,即使一个企业不开发软件,也具备其业务模型;
  • 所有同行企业,其业务模型必定有非常大的共性和内在的规律性。
  • 由行业内的各个企业的业务模型再向上抽象出整个行业的业务模型,这个模型称之为“领域模型”。

实战派观点:

  • 领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,描述的是业务中涉及到的实体及其相互之间的关系,它是需求分析的产物,与问题域相关。
  • 是需求分析人员与用户交流的有力工具,是彼此交流的语言。

理论派

领域模型是一种特殊的业务模型,它分析范围是整个行业,抽象出行业里共性和内在规律性的业务,比业务模型更加抽象,它不属于软件开发范畴的概念,与软件开发无关。

实战派

领域模型是一种分析模型,在软件开发过程分析阶段用于分析如何满足系统功能性需求,属于软件开发范畴,在UML中主要使用类图来描述领域模型。

业务模型是业务建模的输出物,业务建模研究的对象是公司或者组织,业务建模属于软件开发过程中的初始阶段。

软件开发过程:业务建模、需求、分析、设计。

在软件开发过程中我们接触到的领域模型属于实战派

从这个定义我们可以看出,领域模型有两个主要的作用:

  1. 发掘重要的业务领域概念
  2. 建立业务领域概念之间的关系  

二,如何领域建模

领域模型如此重要,很多同学可能会认为领域建模很复杂,需要很高的技巧。事实上领域建模非常简单,概括一下就是“找名词”! 

一个关键的问题还没有说明:从哪里找? 如果你还记得领域模型是“需求到面向对象的桥梁”,那么你肯定一下子就能想到:从需求模型中找,具 体来说就是从用例中找。 

归纳一下域建模的方法就是“从用例中找名词”。 当然,找到名词后,为了能够更加符合面向对象的要求和特点,我们还需要对这些名词进一步完善,这就 是接下来的步骤:加属性,连关系

最后我们总结出领域建模的三字经方法:找名词、加属性、连关系。 

A. 发现类和对象:尽可能多的找出概念类(识别方法:概念类分类列表、名词性短语)

a.概念分类列表:人、事物、地点、组织、概念、事件、规则、抽象名词、交易项目、角色、设备、组织结构(对用例进行识别:实体、过程中的信息、角色的输入输出、操作设备等)

b.名词分析法:识别问题域和用例描述中的名词和名词性短语作为候选的概念类和属性,从候选项中,摒弃多余的名词,确定最终的对象(注意是作为类还是属性,类可以是一种标识、状态和行为)

B. 建立类之间的关联(关联、继承、依赖)

关联:类之间的某种语义关系包括聚合,组合

继承:一般到特殊

依赖:表明一个元素(源元素)的定义或实现依赖另一个元素(被依赖元素)的定义或实现

C. 添加类的重要属性(类的语义完整性、类的作用、问题域相关特性等)

a.语法:可见性 属性名:类型 多重性=默认值{特性表}  

       /  [可见性] 属性名 [:类型] [=初始值]

b.属性类型是简单的数据类型为佳,如果是复杂概念,考虑是否单独作为一个概念类

c.任何属性都不表示外键,即不应该用属性来联系概念类,区别于数据库设计中的外键

参考资料:云南大学软件学院PPT  https://wenku.baidu.com/view/b5dfce3303d8ce2f00662382.html  

三、实例

找名词

who : 学员、讲师、管理员

用例:

1. 管理员 创建了 北京 和 上海 两个校区

2. 管理员 创建了 Linux \ Python \ Go 3个课程 

3. 管理员 创建了 北京校区的Python 16期, Go开发第一期,和上海校区的Linux 36期 班级

4. 管理员 创建了 北京校区的 学员 小晴 ,并将其 分配 在了 班级  python 16期 

5. 管理员 创建了 讲师 Alex , 并将其分配 给了 班级 python 16期 和全栈脱产5期

6. 讲师 Alex 创建 了一条 python 16期的 上课纪录 Day6 

7. 讲师 Alex 为Day6这节课 所有的学员 批了作业 ,小晴得了A, 李磊得了C-, 严帅得了B

8. 学员小晴 在 python 16 的 day6里 提交了作业 

9. 学员李磊 查看了自己所报的所有课程 

10 学员 李磊  在 查看了 自己在 py16期 的 成绩列表 ,然后自杀了

11. 学员小晴  跟 讲师 Alex 表白了

 名词列表:

管理员、校区、课程、班级、上课纪录、作业、成绩、讲师、学员

加属性

领域模型详解  

连关系 

有了类,也有了属性,接下来自然就是找出它们的关系了。

领域模型详解

 


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224680.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:23
下一篇 2026年3月17日 上午11:24


相关推荐

  • 傅里叶变换一步步详细推导「建议收藏」

    傅里叶变换一步步详细推导「建议收藏」前言在大学的时候接触过几次傅里叶变换的知识,但是从来没真正懂过.也在网上找过很多资料,看过很多视频,但是,这些内容要么举些简单的例子说说直观上的理解,要么就是直接堆出公式没有任何推导.直到一个巧合在B站上看到这样一个视频才真正搞懂,非常感谢这位UP主DR_CAN.这篇博客也主要是对视频中的推导模仿一遍.同时记录下笔记方便复习.另外,记录当时一条印象很深的弹幕:根本就没有人会学不懂数学,只是…

    2022年7月17日
    16
  • tfw格式图解[通俗易懂]

    tfw格式图解[通俗易懂]TFW格式,是关于TIFF影像坐标信息的文本文件。其它影像格式的坐标信息描述文件与其格式是一样的,后缀名可能不同。(bmp-bpw/png-pgw/jpg-jpw)话不多说,直接看图。上图中的UV坐标,实际上只的是图像的横向坐标和纵向坐标 。即图像的行和列坐标。 对于图上任意一个像素点(col,row)这个坐标,换算其地理坐标就十分简单。GeoX=1000.000+…

    2025年7月31日
    5
  • 完整的蓝屏错误代码大全详解[通俗易懂]

    完整的蓝屏错误代码大全详解[通俗易懂]完整的BSOD错误代码列表从STOP0x1到STOP0xC0000221一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。在任何Windows操作系统中都会出现BSOD错误,包括Windows10,Windows8,Windows7,WindowsVista,WindowsXP甚至Windows98/95。由于蓝屏错误让…

    2022年5月15日
    47
  • QQ分享 QQ空间分享 API链接:

    QQ分享 QQ空间分享 API链接:

    2021年10月29日
    52
  • LaTeX简明教程(一)[通俗易懂]

    LaTeX简明教程(一)[通俗易懂]LaTeX的安装配置与第一个latex文件的编译(hellolatex!)

    2022年7月1日
    25
  • 递归算法之阶乘算法

    递归算法之阶乘算法递归算法是一种比较难理解的算法,本人是一位学生,饱受编程之苦,为了给广大学编程的童鞋提供方便,这里总结了一些教科书中常见的递归算法案例。这是第一篇,简单的用递归实现的阶乘算法。#includeusingnamespacestd;intFactorial(intn){ intsum=0;//定义一个累乘的sum量 if(n==0)return

    2022年7月24日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号