DDD领域驱动设计批评-文集-点击查看>>
《软件方法》强化自测题集-点击查看>>****
8.2 建模步骤3-1 识别类和属性
8.2.1 面向对象的假设
当使用面向对象的方法来分析系统时,我们假设系统由”对象”这样一种东西构成,对象封装了数据和行为。
在分析工作流,我们假设系统中的对象在一个虚的”对象空间”中运行。这个空间不是内存,也不是硬盘,只是人脑中的一个逻辑空间,将它想象成宇宙空间也未尝不可。在”对象空间”中,不存在性能问题,存储空间无限大,对象的创建、对象之间的通信以及各种计算无限快,支持无限多的人并发……。显然,也不存在什么硬盘、内存、Cache、加载……等概念。万事俱备,只欠你分析的核心域逻辑。
图8-37 三种分析类的构造型
一些UML工具(如Enterprise Architect、Visual Paradigm)已经内置了这些分析类构造型。如果使用的建模工具没有内置这些构造型,可以自己添加如“>”等文字构造型;或者不用构造型区分,通过给类起名”某某接口”,“某某控制”,也有助于了解该类在系统中扮演的角色。这一点,和第3章讲到业务工人、业务实体时的做法是一样的。
三种分析类只是一种逻辑上的思考方式,如果你乐意,可以换成另外的思考方式。在设计工作流,三种分析类可以映射到任何实现架构,包括但不限于MVC、MVP、MVVM、六边形、洋葱型……甚至映射到不做任何分割的“架构”。
图8-38展示了三种分析类的责任、和需求的关系以及命名。
构造型 | 责任 | 和需求的关系 | 命名 |
边界类 | 输入、输出以及简单的过滤 | 每个有接口的外系统映射一个边界类。 | 外系统名称+接口 |
控制类 | 控制用例流,为实体类分配责任。 | 每个用例映射一个控制类。 | 用例名称+控制 |
实体类 | 系统的核心,封装核心域逻辑和数据。 | 用例和实体类的关系是多对多的,一个用例可以由一到多个实体类协作实现,一个实体类可以参与一到多个用例的实现。 | 领域概念名称 |
图8-38 分析类的责任、和需求的关系以及命名。
图8-39用序列图展示了三种分析类之间的协作。
图8-40 外系统映射边界类
图8-40中,“时间”映射一个“时间接口”,“软件开发人员”映射一个“软件开发人员接口”,“助理”映射一个“助理接口”。
外系统如果是人,对应的边界类也可以叫“**界面”,例如“助理界面”。本书就不区分了,一律起名“**接口”。
分析工作流的边界类不暗示任何实现方案。在总责任相等的前提下,它和实现的映射是多样的,可以用图形界面实现,也可以用非图形界面(包括文本、声音……)实现。
即使使用图形界面实现,也不能简单认为一个边界类对应一个窗体(Form)。一个边界类的责任可以拆解到多个窗体上,一个窗体也可以和多个外系统交互。如何组织这些责任,应该从外系统的角度来考虑,而不是从用例或实体类的角度来考虑。
图8-41中,“助理接口”边界类被圈住的几个责任来自不同用例的步骤,但在使用图形界面实现时,可以放在面向助理的、通知专用的同一个窗体中。
图8-42 外系统不映射实体类
系统是否需要一个“助理”类,要看系统是否需要维护助理的信息。如果需要,会在某个用例规约的某个地方体现,例如,可能会有一个步骤:
7. 系统保存通知任务
绑定一个字段列表:
7. 通知任务=4+创建时间+创建人
这个“创建人”就是助理,说明系统需要记住助理的信息,这时才会有“助理”类。
但并不是所有的系统都需要保留人的信息。例如,乘客坐电梯上楼,乘客是电梯系统的执行者,但电梯系统可能不需要”乘客”实体类,因为它不需要记住乘客的信息。
当然,有朝一日,电梯升级为防疫电梯,用例规约里有:
4 乘客提供身份标识
5 系统验证身份标识合法
6 系统记录乘客信息和入厢时间
这时,电梯系统里就有”乘客”实体类了,因为系统要记住乘客的信息。
当然,虽然电梯系统没有”乘客”类,但会有”乘客接口”类,可能的类图和常见的实现方式如图8-43。
图8-44 各工作流如何称呼目标系统
在业务建模工作流,研究范围是组织,而组织中有很多系统,在业务序列图上提到目标系统时,只是说“系统”二字无法让人理解指的是哪一个系统,需要写出目标系统的名字“***系统”。
在需求工作流,研究范围是目标系统整体,此时,聚光灯已经打在目标系统身上,不需要再写目标系统的名字,写“系统”二字即可。
就像公司开表彰会,老总宣布优秀员工名单时,要说名字“罗永昊”、“罗阵宇”,轮到优秀员工罗永昊上台发言时,罗永昊称呼自己就不好再说“罗永昊”,说“我”、“在下”、“小弟”就行了。
*用自己的名字以及第三人称来称呼自己,往往代表一种__极度的”自信”__。例如:
“凯撒注意到这事,把他的军队撤到最近的一座山上去”(《高卢战记》)
“老胡觉得这件事实在不应该”
“婷婷想吃冰淇淋嘛”*
而在分析工作流,研究范围是系统的内部构成。系统已经被分解成很多个类,这时就不能再说“系统”了。
有的建模人员会把”系统”识别成一个类,画成这样:
1. [单选]方法学家马宝国老师在推行一种“面向浑元形意太极”的分析方法,按照本书的知识点,看到这个名字,我们最应该想到的是:
? A) 你家老公会劈砖,小哥会打那太极拳
? B) 马老师的建模方法是伪创新
? C) 马老师的方法假设系统由“浑元形意太极”构成
? D) 我左手一式太极拳,右手一剑刺身前
2. [单选]为什么面向对象分析设计方法比面向过程好p>
? A) 面向对象更适合人脑去把握系统的复杂性。
? B) 面向对象和需求的映射更直接。
? C) 面向对象方法更容易掌握。
? D) 面向对象更符合计算机的底层。
3. [单选]铁路售票处,售票员使用售票系统来售票,在用例进行过程中,系统需要不断向旅客反馈车次、车票和价格信息,系统还需要和银行系统交互。”售票”用例的分析序列图中,会出现_____个边界类,_____个控制类,_____个实体类。
? A) 1,2,3
? B) 3,1,2
? C) 不定,1,3
? D) 3,1,不定
? E) 3,2,3
? F) 3,1,3
? G) 不定,1,不定
? H) 3,3,3
微信:umlchina2
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!