在进行系统构思之后,我们会进行领域分析领域分析的目的是为了构建与业务对应的模型,领域分析步骤如下
领域类模型
1. 寻找类
根据名称和概念,我们可以初步提取一些类
如:销售不同剧院剧目入场券的预定系统,我们提取的暂定类有 剧院,剧目,入场券,预定,系统
不是所有类都符合我们的系统,所以我们需要移除与领域无关的类
移除冗余类:如客户和用户,这两个概念是相同的,所以我们需要移除一个
不相关的类:观看演唱会的人有不同的职业,但我们的演唱会系统不关心他们的职业,所以移除职业
移除属性:如“我们需要测量体检人的身高体重”,身高体重虽然是名词,但是在更多时候,他们更适合做为属性而不是类
移除操作:如“用户可以通过电话预约我们的房间”,电话预约是一个操作,如果我们不想记录这个操作,那么我们可以移除这个类
移除实现制品:如进程,cpu,用户工厂,xx管理器等,在实现阶段才会用到,在领域分析中不应该出现
2. 准备数据词典
数据词典就是一份类名的说明文档,数据词典用于解释我们每个类的意义
3. 寻找关联
类之间的关系有:依赖,关联,聚合,泛化
关联:指2个类之间非临时性的引用,聚合是一种强类型的关系
寻找关联就是确定类之间的关系,如:”公司招聘雇员“,”银行拥有出纳柜台“,”ATM打印收据“,这些语句都描述了两个类之间的关系
我们需要从语句中判断类之间的关系,或者其隐含的关系
删除无关关联:有些关联对于我们所做的系统是无关的
动作:动作一般隐含两个类之间的关系,如”公司招聘雇员“隐含公司具有雇员(公司1——*雇员),而”ATM接收银行卡“并不能说明ATM具有银行卡(即ATM和银行卡没有关联)
三元关联:一般三元关系我们可以消为二元关联,你要问我怎么消,我也不知道
限定关联:对于 *——*,1——* 我们应该考虑是否加上限定符使 * 变为 1
聚合:有时候我们会纠结是否是使用聚合还是关联,我们不用过多的纠结这个问题,用你觉得合适的就行
4. 属性
提升为对象:如”联系人地址“地址是一个属性还是作为一个对象,要看情况而定,一般我们能不提升为对象就不提升
提升为限定符:有些属性会作为限定符,如Name,多数情况下,Name都是唯一的(例,一个站点的用户名不能相同,但不同站点的用户名可以相同)
5. 使用继承细化
如”我们有2种支付方式,可以使用现金支付,也可以使用微信支付“现金支付和微信支付就是支付的一个继承
领域状态模型
1. 确定具有状态的类
并不是每个类都需要有状态图,很多类就只有创建和销毁,我们不需要为其话状态图
2. 寻找状态
3. 寻找事件
事件就是推进类状态改变的动作
4. 构建状态图