MODELING GENERALIZATION & REFINING THE DOMAIN MODEL 徐迎晓 xuyingxiao@126.com 复旦大学软件学院
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
根据本次迭代的需求,从用例描述以及Concept Category List中提取新的概念类: CreditCard, CashPayment, CreditPayrnent, CreditAuthorizationService,…
对泛化建模 将相似的概念提取出公共性,以更概括、更抽象的方式理解术语 Domain model不提及继承,继承是软件机制,使superclass的属性和操作可在subclass中使用
另一种画法
Class hierarchy with separate and shared arrow notations. 两种画法 Class hierarchy with separate and shared arrow notations.
100% Rule Superclass的定义应该100%适用于 subclass. Subclass必须100%符合superclass的: attributes associations 属性: Amount继承下来 关联: Pays-for
Is-a Rule Subclass is a Superclass CreditPayment is a Payment
何时定义子类和父类 Credit Payment与CreditCard关联 Credit Payment在如何验证方面处理不同 =======TEMP 何时定义父类 类似的概念,相同的关联,相同的属性,符合is-a and 100% rule 何时定义子类 LoanableResource-Book 有新的属性 Payments — Credit Payment Credit Payment与CreditCard关联 Credit Payment在如何验证方面处理不同 Human——MaleHuman MaleHuman和FemaleHuman购物习惯不同 Table 26.2 当子类有新的属性、关联, 或与父类或其他子类有不同的操作、处理、响应, 或代表会动的事物,具有不同的行为 都是要看和用例需求是否有关,如MaleCustomer and FemaleCustomer在我们的用例需求中不需要区分
左上:定义父类----有共同的属性或关联 左下:定义子类—--按照不同方式处理(Credit Payment, Check Payment等在如何验证方面处理不同) 右: 定义子类----有新的关联
左: 定义父类----有共同的属性或关联 右: 定义子类----有新的关联 此外:定义子类可 出于具有新的属性,如LoanableResource-Book 代表会动的事物,具有不同的行为,如Human——MaleHuman MaleHuman和FemaleHuman购物习惯不同 都是要看和用例需求是否有关,如MaleCustomer and FemaleCustomer在我们的用例需求中不需要区分 Figure 26.9, 26.10粒度问题跳过 ,
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
Abstract conceptual classes. 椭圆代表实例的集合 下图中payment是抽象的:payment实例不能独立存在,只能是CashPayment、CreditPayment等之一
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
关联类association class 需求 Store发出验证请求时需要提供ID以表明身份 验证服务为每个store分配一个merchant ID 同一个store针对每个服务具有不同的ID merchant ID(零售商ID)
错,同一个Store可能有多个针对不同AuthorizationService有多个merchantID 同一个AuthorizationService针对不同Store也提供不同的merchantID
一个属性若和关联有关,或两个概念之间存在多对多的关联,考虑关联类 关联类的实例的生命周期依赖于关联 association class is a class that is connected to an association. There is an instance of the association class for every instance of the relationship (e.g., for every link).
many-to-many association 上到这里
PrimaryScheduleOfferingfInfo Java实现
PrimaryScheduleOfferingfInfo C++实现
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
Aggregation and Composition
Consider showing aggregation when: “部分”的生命周期界定在“整体”的生命周期之内 整体和部分之间存在create-delete依赖 整体和部分之间存在明显的物理和逻辑上的组装关系 复合体的某些属性(如位置)可传递给部分 复合体上的操作(如copy, delete, destruction, movement, recording)可传递给部分.
Aggregation in the POS Domain Model 同时具有 Part of 关系和create-delete dependency (Sale删除,则SaleLineItem生命周期也结束) 标出聚合,使用GASP模式时有助于识别Creator。 澄清领域中的约束, 应用于整体的操作,如copy and delete,常传递到部分
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
考虑时间问题 Product-Specification区分历史价格和当前价格 若SalesLineItem总是从ProductSpecification中提取当前Price,则若价格已经更新过,旧的Sale将使用新价格,不正确
上图:以前没有考虑聚合和时间的domain model
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
DERIVED ELEMENTS 避免显示,但若在术语中比较突出,且避开它会削弱可理解性,则显示 Quantity ? Sale total可以由SalesLineItem 和Product-Specification导出 SalesLineItem quantity可以由相关联的SalesLineItem的对象数量导出 =======E======= Sale total can be derived from SalesLineItem and Product-Specification information SalesLineItem quantity is actually derivable from the number of instances of Items associated with the line item
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
Qualified Associations 减少多重性
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
Ordered Elements
泛化 抽象概念类 考虑关联类 考虑聚合 考虑时间 导出元素 限定符 Ordered Elements 包的表示及如何分区
Package 包中绘出元素时,包的名字写在上方,否则写在中间
A referenced class in a package. 右图,引用其他包中的元素
package dependency
How to Partition the Domain Model same subject area 紧密相关的概念或同一目的的 同一个类的层次 参与同一个用例 strongly associated domain model所有元素可定义一个包Domain, 公共的、核心的概念可定义在 Core Elements or Common Concepts包中
紧密相关的概念或同一目的的 同一个类的层次 参与同一个用例 strongly associated
没有新的概念
和第一次迭代一样,主要是need-to-know关系 增加DriversLicense Identifies Customer,以便于理解 在美国,多数商家需要至少两份证件才允许你把私人支票兑现。除学生身份证外,州颁发的汽车驾驶执照(state driver’s license)也可用作证件 (http://abroad.9c9c.com.cn/studyabroad/America/shenghuo/topic_1670.html) PaymentAuthorizationReply is expressed as an association class.
没有新的概念
没有新的概念
一般需要给关联起个有意义的名字,但此处payments and their transactions.省略了关联的名字,因为阅读者可以理解