前言

简单整理一下领域模型。

正文

领域模型是对领域内的概念类或现实中的对象的可视化表示

领域模型也称概念模型、领域对象模型和分析对象模型

领域模型是可以在业务建模科目中创建的制品之一

领域模型是up业务对象模型的特化。

领域模型在软件设计图的关系:

一开始是梳理需求,写出用例文本,建立用例模型。

然后领域模型是业务模型的一环,领域模型通过用例模型抽取出概念类、术语、概念、属性、关联。

当在业务模型中建立了领域模型之后,反过来丰富了用例模型,多了些操作契约。多了契约操作的话,那么可以以此来编写顺序图。

在uml中,领域模型被描述为一组没有定义操作的类图。

值得注意的是领域模型不是在设计阶段,不要带软件中的设计或者数据库设计。

现实中的思想,事务或者对象。关注现实世界,而非软件对象。

领域模型创建的步骤:

  1. 寻找概念类
  2. 绘制UML类图
  3. 加关联属性

如果寻找概念类?

  1. 重用修改现在的模型
  2. 常见分类列表
  3. 名词短语(从详述用例)

什么是概念类:

概念类是思想、事物或对象。更正正式地讲,概念类可以从其符号、内涵和外延来考虑。

举个例子:

领域模型和数据模型是一回事吗?

  1. 领域模型不是数据模型(持续化数据)
  2. 在领域模型中不会排除没有明确要求记录其相关信息的类,也不会排除没有属性的概念类
  3. 在领域内充当纯行为角色,而不是信息角色的概念类也是有效的

动机: 降低与oo建模之间的表示差异

例如:

面向对象开发者在创建类时收到真实世界领域的启发

因此,涉众所设想的领域与其在在在软件的表示之间的表示差异被降低。

准则: 像地图绘制者一样思考:使用领域术语

  1. 使用地域中现有的名称。在图书馆模型中,将顾客命名为"借书者"、"赞助者"等,这是图书管理员使用的术语
  2. 排除无关或超出范围的特性
  3. 不要凭空增加事物

准则: 如何对非现实世界建模

  1. 有些软件系统的领域与自然领域或业务领域几乎没有类似指出,例如:电信软件
  2. 此时需要高度的抽象,对常见的非00设计进行回顾,并认真汲取领域专家所使用的核心词汇和概念
  3. 例如,电信软件的候选概念类:消息、连接、端口、会话、路由、协议

准则: 属性与类的常见错误

常见错误: 把应该是概念类的事务表示属性

判别准则: 如果我们认为某概念X不是现实中的数字或者文本,那么x可能是概念类而不是属性。

准则: 何时使用"描述"类建模

描述包含描述事物的信息:如productDescription 记录Item的价格、图片和文字描述。

命名方式:项目-描述符

  1. 描述有关商品或服务的描述,独立于任何商务或服务现有实例
  2. 删除所描述事物的实例后,导致信息丢失,而这些信息是需要维护的,但是被错误低于所删除的事务关联起来
  3. 减少冗余或重复信息

关联:

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

在uml中,关联被定义为"两个或多个类之间的语义联系",涉及这些类元实例之间的连接。

观点:关联是否在软件中实现

  1. 在领域建模中,关联不是关于数据流、数据库外键的联系、实例变量或软件方案的对象连接语句;

    关联声明是针对现实领域从纯概念角度看有意义的关系
  2. 这些关系的大部分作为导航(设计模型和数据模型中的)和可见性路径再软件中加以实现。

下一节顺序图

UML 哲学之道——领域模型[四]的更多相关文章

  1. 敏捷开发之道(四)Scrum概述

    上次的博文敏捷开发之道(二)极限编程XP和敏捷开发之道(三)极限编程XP续中,我们介绍了一下敏捷开发中的XP开发方法,今天咱们来了解另一个比较流行的敏捷开发方法--Scrum. 1.Scrum简介 S ...

  2. java中文乱码解决之道(四)-----java编码转换过程

    前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的.但是了解这些仅仅只是一个开始,以下博客将侧重介绍java乱码是如何 ...

  3. HT图形组件设计之道(四)

    在<HT图形组件设计之道(二)>我们展示了HT在2D图形矢量的数据绑定功能,这种机制不仅可用于2D图形,HT的通用组件甚至3D引擎都具备这种数据绑定机制,此篇我们将构建一个3D飞机模型,展 ...

  4. java中文乱码解决之道(四)—–java编码转换过程

    原文出处:http://cmsblogs.com/?p=1475 前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的. ...

  5. codeforces水题100道 第四题 Codeforces Round #105 (Div. 2) A. Insomnia cure (math)

    题目链接:http://www.codeforces.com/problemset/problem/148/A题意:求1到d中有多少个数能被k,l,m,n中的至少一个数整出.C++代码: #inclu ...

  6. 编写高质量代码:Web前端开发修炼之道(四)

    这一节是继上一节高质量的Javascript 7)编程实用技巧 1:弹性 从 一个标签区和内容区的实例(就是点击不同的标签菜单显示不同的内容块)来说明不需要每个tabmenu都设置onclick事件, ...

  7. UML和模式应用5:细化阶段(2)--细化阶段制品之领域模型

    1.前言 领域模型是OO分析中最重要和经典的模型.它阐述了领域中的重要概念: 领域模型作为设计某些软件对象的重要来源,也作为案例研究中探讨的几个制品的输入: 领域模型的范围限定于当前迭代开发的用例场景 ...

  8. 2019年北航OO第四单元(UML任务)及学期总结

    第四单元两次作业总结 第十三次作业 需求分析 本次作业需要完成一个UML类图解析器,所需要解析的只有符合UML标准和能够在Java 8中复现的UML类图.查询指令存在两种:仅与所查对象有关的指令,以及 ...

  9. <..................> 哈佛大学哲学系 && 历史哲学笔记文献集

    哈佛大学哲学系课程表            (一)概况    (1)哈佛大学哲学系现有教师21人,其中访问教授7人,教师流动性较大,每年有一定的变化.以下为现任教师:Richard Moran(系主任 ...

  10. UML期末复习题——2.4:Domain Model

    第四题:领域模型 重要概念: 1. 领域模型:是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型,领域对象模型和分析对象模型. 2. 应用UML表示法,领域模型被描述为一组没有定义 ...

随机推荐

  1. 各大OA调试账户默认账户口令

    1.今目标地址:http://web.jingoal.com/mgt/用户名:admin@8216261密码:1a2s3d4f5g2.IBOS博思协同地址:http://demo.ibos.com.c ...

  2. Android学习之文件存储

    •前言 任何一个应用程序,其实说白了就是在不停地和数据打交道,我们聊QQ.看新闻.刷微博,所关心的都是里面的数据, 没有数据的应用程序就变成了一个空壳子,对用户来说没有任何实际用途. 那么这些数据都是 ...

  3. 基于 Mindspore 框架与 ModelArts 平台的 MNIST 手写体识别实验

    简介 实验包含 2部分: 基于 Mindspore 框架的模型本地训练及预测 基于 Modelarts 平台和 PyTorch框架的模型训练及部署 基于 Mindspore 框架的模型本地训练及预测 ...

  4. 我为什么使用Linux做开发

    系统选择 目前市面上主流的桌面操作系统在大多数人眼里只有Windows和MacOS,那为什么我没选择它们两呢? 首先,不选MacOS的原因,就是太贵.当然这是我的原因不是苹果的原因,我最早使用Linu ...

  5. MindSpore自定义算子中的张量维度问题

    技术背景 在前面的几篇博客中,我们介绍了MindSpore框架下使用CUDA来定义本地算子的基本方法,以及配合反向传播函数的使用,这里主要探讨一下MindSpore框架对于CUDA本地算子的输入输出的 ...

  6. vscode ctrl + d 删除当前行 更改快捷键

    vscode 删除当前行 更改快捷键

  7. Review Book for GEE(Graduate Entrance Examination)

    English is made up of phrases and idioms, in the case of both written and spoken usage. When learnin ...

  8. Electron 开发过程中主进程的无法看到 console.log 输出怎么办

    开发过程中命令行工具(powershell.terminal)内无法看到 console.log 输出 Eelectron 的在开发过程中主进程 NodeJS 内往往需要 console.log 来进 ...

  9. CentOS 7.9 环境下搭建k8s集群(一主两从)

    目录 一.硬件准备(虚拟主机) 二.环境准备 1.所有机器关闭防火墙 2.所有机器关闭selinux 3.所有机器关闭swap 4.所有机器上添加主机名与ip的对应关系 5.在所有主机上将桥接的ipv ...

  10. find第二天

    find第二天 1.找出/tmp目录下,属主不是root,且文件名不以f开头的文件 find /tmp ! -user root -a ! -name 'f*' 或者 find /tmp ! -use ...