Chapter 9 领域模型.

Slides:



Advertisements
Similar presentations
1 计算机软件考试命题模式 计算机软件考试命题模式 张 淑 平 张 淑 平. 2  命题模式内容  组织管理模式 − 命题机构和人员组成 − 命题程序  试卷组成模式.
Advertisements

Chapter 3: SQL.
——Windows98与Office2000(第二版) 林卓然编著 中山大学出版社
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
第14章 c++中的代码重用.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
第九章 字符串.
Information & Security System in China China North Eastern Air Traffic Control Bureau (CAAC) Customer Background Subsidiary of General Administration of.
Hadoop I/O By ShiChaojie.
Overview of Python Visualization Tools
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
面向对象建模技术 软件工程系 林 琳.
單元3:軟體設計 3-1實體關係圖 Ch 08 System models.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
管理信息结构SMI.
SQL Injection.
走进编程 程序的顺序结构(二).
辅导课程六.
第17章 网站发布.
数据挖掘工具性能比较.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
新一代安全网上银行 小组成员:杨志明 王晶 任毅 刘建中 关昊 刘超.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
解决变化问题的自底向上 流程建模方法 严志民 徐玮.
第二章 登录UNIX操作系统.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
VisComposer 2019/4/17.
网页设计与制作 —— 学习情境二:网页模板设计
商业分析平台-语义元数据 用友集团技术中心 边传猛 2013年 11月 06日.
第二章 Java基本语法 讲师:复凡.
VB与Access数据库的连接.
Aspect Oriented Programming
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第4章 Excel电子表格制作软件 4.4 函数(一).
Harvard ManageMentor®
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
数据集的抽取式摘要 程龚, 徐丹云.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Logo 思维 力量 商务展示·企业内训.
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
Visual Basic程序设计 第13章 访问数据库
MODELING GENERALIZATION & REFINING THE DOMAIN MODEL
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
Delphi 7.0开发示例.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
_01自己实现简单的消息处理框架模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
学习目标 1、什么是列类型 2、列类型之数值类型.
Chapter 16 UML类图.
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
Presentation transcript:

Chapter 9 领域模型

目标 处理当前迭代相关的概念类 创建初始的领域模型 为模型建立适当的属性和关联

定义:什么是领域模型 领域模型(Domain Model)是对领域内概念类的可视化表示。 为什么要创建领域模型 提高模型的抽象层次,减少我们的思维和软件模型之间的表示差距。同时促进对领域问题的理解 领域模型也称为概念模型、领域对象模型、分析对象模型、可视化字典。 通过UML表示法,领域模型被描述为一组没有定义操作的类图,提供了概念透视图。他可以展示: 领域对象或概念类 概念类之间的关联 概念类的属性

领域模型不是软件对象的模型 比如,在领域模型中,不会有窗口或数据表之类的对象,也不会有职责或方法

领域模型不是数据模型 数据模型是针对信息系统的模型,用于表示存储于某处的持久性数据。 领域模型考虑的是领域中有哪些概念,数据模型考虑的是这些概念是如何被持久化的。 将领域模型和数据模型混淆是面向对象的开发人员最常见的错误。

如何创建领域模型 寻找概念类 将其绘制为UML类图中的类 添加关联和属性

概念类 领域模型中包含多个概念类 概念可以从其符号,内涵和外延来考虑: 符号:表示概念类的词语或图形 内涵:概念类的定义(意义) 外延:概念类的一组示例

概念类的表示法

如何寻找概念类 找到概念类的三条策略 重用和修改现有的模型 使用分类列表 确定名词短语 Martin Fowler的分析模型<analysis patterns> 使用分类列表 确定名词短语

使用分类列表(一) 业务交易 Sale/Payment 交易项目 SalesLineItem 与交易项目相关的产品或服务 Item/Flight/Seat 交易记录的与何处? Register 与交易相关的人或组织的角色 Cashier/Store 交易/活动地点 Store 重要事件 物理对象 事物的描述 ProductDescription ……

使用分类列表(二) 类别 ProductCatalog 事物的容器 Store/Bin 容器中的事物 Item 其他协作的系统 CreditAuthorizationSystem 金融、工作、合约的记录 Receipt/MaintenanceLog 金融手段 Cash/Check 执行工作所需的进度表、手册、文档 RepairSchedule

通过识别名词短语寻找概念类 通过一种名为语言分析的技术,从对领域的文本性描述中识别名词和名词短语,将其作为候选的概念类或属性。

The NextGen POS Domain Model

几个准则 敏捷建模:绘制类的草图 敏捷建模:是否需要工具维护模型? 报表或票据是否是系统领域模型的元素? 使用领域术语

描述类 Item的一个实例(instance)代表店铺中一件实际的商品。 每一个Item 都有 description, price 和 Serial number 的信息,并且这些信息其他地方没有记录。 当一件商品销售出去,相应的记录会从数据库中删除。

问题 数据重复(description, price, itemID) 如果一件商品销售完毕,比如ABC Cookie,谁能够知道这件商品的价格? 如何处理价格的变动?

解决方案:使用描述类 引入一个新的概念:ProductSpecification,代表了一类商品的信息。 Worse Better

航班 Worse Better

关联 概念不是孤立存在的,他们之间存在各种各样的关系。 关联是类之间的关系,表示有意义的,值得关注的连接。 避免表现出大量的关联,连线太多会产生“视觉干扰”,使图变得混乱。 避免考虑软件的实现,添加关联是为了突出我们对重要关系的大致理解,而非考虑数据结构。 在软件中实现关联是实现领域模型中最复杂的部分之一。

常用的关联列表 A是与交易B相关的交易 CashPayment-Sale A是交易B中的一个项目 SalesLineItem – Sale Drawer-Register Seat-Airplane A被物理或逻辑地包含在B中 Register-Store A是B的描述 ItemDescription – Item ……

最常见的关联 A是B的物理或逻辑组成部分 A被物理或逻辑地包含在B中

表示法

命名关联 使用 ClassName-VerbPhrase-ClassName 格式 例: Flight – Flies-to - City 名词部分是关联的名字 例: Flight – Flies-to - City

角色 Company Employer Person Employee

多重性 定义一个A的实例能够和多少个B的实例关联。 例子: 店铺里有很多商品 Stocks Store Item 1 *

多重性

多重性 多重性的语境相关

两个类之间的多重关联 Flight – Flies-to – Airport Flight – Flies-from - Airport * 1 Flies-to Airport Flies-from

两个类之间的多重关联 Drives Car Person Washes Starts Stops

什么是属性 属性是对象的逻辑数据。 属性的表示法 导出属性

恰当的属性 不要将概念处理为属性 不要将复杂属性处理为简单属性

恰当的属性 领域模型中的属性应该是基本数据类型(Data Type),比如Boolean, String等(值对象)。 数据类型和概念类之间有什么区别? 通过关联而不是属性表示概念之间的关系。

扩充基本数据类型 ItemID仅仅是一个Number吗?还是应该定义一个ItemIdentifier类型? 何时定义新的数据类型? 准则: 可以分割成不同的部分. 电话号码, 人名,地址 具有与之相关的操作,例如解析或校验 日期

示例:对地址进行建模

对数量和单位建模 Analysis Patterns - Reusable Object Models( Martin Flower ) 大多数数值类型都不应该简单的用Number来表示,因为需要表示单位. An example: Money

对数量和单位建模 worse better

任何属性都不表示外键 属性不应该用来表示概念类之间的关系。 违反这一原则的常见情况时像在关系数据库设计中那样增加一种外键属性(foreign key attribute)。外键是实现对象间关系的一种方法。 概念模型和ER图的关系

ER Diagram and Class Diagram 多对多的情况?

多对多的情况

Domain Model of POS System

小结 什么是领域模型 识别领域概念 建立概念间的关联 识别概念的属性

领域模型补充

内容 几个领域模型 分析模式简介

例:出版物收藏个人信息系统 目标 管理自己收藏和阅读过的各种出版物 收集和记录有关出版物的阅读信息 他人的评论 自己的读后感

出版物收藏个人信息系统 出版物类型 书 纸质 电子书 DVD ( 可选 ) DVD介质 计算机文件 评论 个人评论 他人评论

用例:阅读书籍 选择一本书开始阅读,告诉系统这本书处于阅读中。 写读书日志(可能有多篇),并录入系统。 可以从网络或其他杂志收集该书的书评,记录到系统中。 阅读完毕后,系统记录本次阅读完毕。

书籍:核心

与阅读相关的领域模型

一个电路模型

一个电路模型 《Domain-Driven Design: Tackling Complexity in the Heart of Software》 By Eric Evans

Java的抽象语法树 //SampleJava.java public class SampleJava { public int testMethod(int param){ if(param<0){ return -1; }else{ return 1; }

UML的元模型(类)

分析模式简介 模式的定义: 分析模式: 分析模式和设计模式的区别 在特定的情况下,针对一个普遍问题的解决方案[Christopher Alexander, architect] 分析模式: Analysis Patterns: Reusable Object Models Martin Fowler 分析模式和设计模式的区别 分析模式解决领域问题,设计模式解决设计(技术领域)问题。

Party(当事人 ) 我们经常需要和人与组织打交道,如何建立这个领域的概念模型?

Accountability(责任关系) 复旦大学(Company Party)和我(Person Party)建立了一种雇用责任关系(Accountability) ,其中复旦大学是委托方(commissioner),我是责任方(responsible) 教研组和ABC公司签订了软件开发合同(Accountability),其中委托方(commissioner)为ABC公司,责任方是教研组(responsible)

Account/Transaction(帐户/交易)

Account/Transaction(帐户/交易) 使用信用卡支付超市购买商品的费用500元 两个账户(个人账户和商场账户) 两笔明细(个人账户明细和商场账户明细,各为-500元和500元) 一次交易 生产车间从公共仓库领取5桶油漆 两个账户(工厂现场仓库账户和公共仓库账户) 两笔明细(工厂现场仓库账户明细和公共仓库账户明细,各为-5桶和5桶)

其它模式 测量、观测(Observations and Measurements) 计划(planning) 贸易(trading)

练习 为一个网上书城的部分设计一个模型 与图书关联的信息有:标题,作者,出版社(名称,地址),价格,分类,用户评论列表。 对于每个用户的评论,需记录用户ID、评论内容和星级。