Step 1:识别分析类之实体类
- 如何寻找实体类:
名词驱动的识别方法 - 找出所有的名词或名词短语,对其标注下划线
- 判断是否是实体类,看是否需要管理该名词所拥有的信息,或者系统是否需要管理该名词所能发出或接受的动作
- 合并同义词
- 将最终得到的每一个名词映射为一个实体类
- 动词映射为操作,形容词和名词映射为属性
Step1: 识别分析类之控制类
识别控制类
- 控制类负责协调边界类控制类负责协调边界类和实体类,通常在现实世界中没有对应的事物
- 负责接收边界类的信息,并将其分发给实体类
- 控制类与用例存在着密切的关系,它在用例开始执行时创建,在用例结束时取消
- 一般来说,一个用例对应一个控制类
图书管理系统的控制类
Step2:描述分析类的属性
描述分析类的属性之边界类、控制类
Step 3:定义分析类的操作
注: CRUD是指在做计算处理时的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。
从用例触发,识别类的操作
-
用例的事件流描述了一系列的“动作”:
actor做的;系统自身做的 -
如何把这些动作映射到分析类的操作中?简要归纳一下原则:
- actor自己做的动作,都是边界类的操作,与控制类和实体类无关
- 边界类的操作会调用控制类的操作,并进一步被分解为对各个不同实体类的操作的调用序列
- actor发出的动作通常都比较大,往往涉及到对多个实体类的属性的增删改查(CRUD),不能简单的将它直接放置在某个实体类中
-
实体类的操作分为两类:
- 对该实体的生命周期的操作:如new()、destroy()
- 对该实体内部的一个或多个属性的CRUD操作 — 注意:是自己的属性,不是其他实体的!
-
因此,对用例中actor所发出的每个动作,需要仔细分析它对哪些实体类的哪些属性做CRUD
-
案例 从购物车生成订单
-
有一类用例中的操作,没办法分解为小粒度op,尤其以查询类操作为甚
-
所以,这个操作只能由控制类加以完成:
-
基于数据库中的每条商品记录,使用“商品”类的new操作构建一个“商品”对象,形成一个List,返回给相应的边界类,边界类对其加以展示
另一个办法:在领域模型中增加一个实体类“商品清单”,其中包含了所有的“商品”对象。这样的话,“通过关键字查询”就成了该实体类的一个操作
问题在于:需要在系统初始化时就将该实体类构造出来,否则无法被使用;这明显是不可能的,占用内存空间太大