1、第五讲 分析模式介绍 1 fhfh 什么是领域模型(银行领域模型)帐户 凭证-生效起始日-作废日 1*银行卡-卡号 存折-存折号 存单-存单号 2 fhfh 什么是领域模型(银行领域模型)上图抽象地表示了银行领域中和凭证相关的部分领域知识:?任何一个银行“帐户”可能与多个”凭证“相关;?具体而言,凭证可以是银行卡、存折或存单等形式;?任何凭证都有明确的生效起始日和终止日;?但各种凭证的凭证号去不是统一的,比如存折和信用卡有不同的编号格式;?3 fhfh 储蓄帐户的状态图 挂失 正常 开户开户额10 挂失身份证 解挂身份证 冻结 冻结授权 解冻授权 销户 销户 存款 取款 4 fhfh 储蓄帐户
2、的状态图 该状态图作为银行领域模型的一部分,表达了如下业务知识:?储蓄帐户有正常、挂失、冻结和销户等 4种状态。?有效的储蓄帐户始于开户交易,开户交易成功后储蓄帐户处于正常状态。?开户交易的业务规则是:开户金额 10元人民币。?用户可以凭身份证要求对自己的储蓄帐户进行挂失和解挂交易。?银行可以根据授权(例如司法授权)对储蓄帐户进行冻结和解冻。?处于正常状态的储蓄帐户可以进行存款、取款交易。?处于正常状态的储蓄帐户经销户交易后变成销户状态。5 fhfh 什么是领域模型?由此例可以看出:领域模型是对实际问题领域的抽象表示,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关
3、系。?一般情况,领域模型用类图或状态图表示。6 fhfh 领域建模有必要吗?需求分析的两个典型困难:?用户的参与不够或不够深入,造成需求分析成果中假设的成分太多。?问题领域太复杂时,需求分析的开展会遇到困难。7 fhfh 领域建模(例:项目管理)客户:项目被分解成许多任务,分配下去。项目 任务 项目成员 8 fhfh 领域建模(例:项目管理)客户:项目规定,每个任务只能分配给唯一的人,而一个人可以负责多个任务。项目项目 任务 项目成员*任务 1 任务承担者 分配给 9 fhfh 领域建模(例:项目管理)客户:我们实施的是“多项目管理”,多个项目可能共享某个子任务。比如企业级应用都会用到的一些和
4、领域无关的模块,如身份验证、消息机制等 项目 任务 项目成员*任务 1 任务承担者 分配给*多项目管理 10 fhfh 领域建模(例:项目管理)分析员主观的想法是项目和任务是一对多的关系。项目项目 任务 项目成员*任务 1 任务承担者 分配给 1*11 fhfh 领域建模(例:项目管理)?客户:将项目分解为多个任务之后,需要为任务排定日程,比如,某任务结束之后另一任务才能开始 任务任务 前置任务 后置任务 12 fhfh 领域建模(例:项目管理)客户:我们的项目涉及的资源有多种,比如人、设备和材料等。没有必要的资源,项目无法开展。资源 人 设备 材料 项目 占用 13 fhfh 领域建模(例:
5、项目管理)从逻辑上看,资源是项目占用的,但对资源的使用要具体分配到任务,而且应明确具体的使用期限.资源 人 设备 材料 项目 占用 任务*分配给 资源占用 使用期限 1*前后关系 14 fhfh 什么是分析模式?分析模式实际上是超越了外部描述而得到的系统内部规律。?分析模式更接近系统的概念模型。如果系统概念模型经过抽象,可以应用在多个相似的环境中,那么,它就变成了模式。?例:斯洛克台球模拟程序 15 fhfh 最初的通信簿模型 16 fhfh 团体模式 “团体”应该被用于许多使用了个人或组织的情况 17 fhfh 带有显示的上下级关系的组织结构带有显示的上下级关系的组织结构 集团 区域分公司
6、部门部门 销售办公室 1*1*1*18 fhfh 带有层次关系的组织超类型 19 fhfh 双组织层次结构 20 fhfh 使用类型化关系 21 fhfh 增加一条规则 22 fhfh 责任模式 23 fhfh 责任的知识级和操作级 24 fhfh 责任模式(例子 公司员工角色关系)员工角色 高级经理 经理 项目经理 普通员工 高级经理 经理 项目经理 普通员工 表示工作汇报关系 25 fhfh 责任模式(例子 公司员工角色关系)工作汇报 管理层 经理、高级经理 项目经理 被管理层 项目经理、普通员工 普通员工 1.*1.*管理者 被管理者 知识级 操作级 责任关系 员工角色*1 1 委托方
7、责任方 26 fhfh 责任模式(例子 公司员工角色关系)工作汇报 集合A 经理、高级经理 集合a 项目经理、普通员工 1.*1.*管理者 被管理者 知识级 操作级 责任关系 经理*1 1 委托方 责任方 项目经理 责任关系 高级经理*1 1 委托方 责任方 项目经理 27 fhfh 允许团体类型拥有子类型和超类型 28 fhfh 分层的责任类型 29 fhfh 分级的责任类型 30 fhfh 反复权衡责任类型的子类型 31 fhfh 操作范围 32 fhfh 职位 33 fhfh 分析模式列表 名称 问题 解决方案 团体(Party)人和组织单位有相似的职责 创建一个团体类型作为人和组织的超
8、类型 组织层次(Organization Hierarchies)描述一个分层次的组织结构 在组织上创建一个递归关联 组织结构(Organization Structure)一个组织结构具有层次或者更复杂的连接;出现新的连接种类;保留结构变化的历史 创建组织结构作为两个团体之间的一个直接关系。给它一个组织结构类型来描述这种关系。34 fhfh 分析模式列表 名称 问题 解决方案 责任(Accountability)描述结构类似的组织结构、雇佣、管理、专业注册和合同 创建责任作为两个团体之间的一个直接关系。给它一个责任类型来描述这种关系 责任知识级(Accountability Knowledg
9、e Level)记录那些描述如何能够用一种容易改变的方法来组织责任的规则 通过责任类型和团体类型之间的关联为责任创建一个知识级。这个知识级约束责任和团体的操作级 团体类型泛化(Party Type Generalizations)在一个模型中的很多团体类型,大部分都和某个其它的团体类型相类似 允许团体类型拥有子类型,以便它们继承责任类型 35 fhfh 分析模式列表 名称 问题 解决方案 层次型责任(Hierarchic Accountability)把一些责任类型约束为一个层次结构 定义包含分层约束的责任类型的一个子类型。级的列表可以使你为层次中的每一级命名。操作范围(Operating S
10、cope)描述一个责任所意味的职责 给责任增加一些操作范围。操作范围的类型依赖于责任的类型。职位(Post)责任对应于工作职位而不是做这项工作的人 创建一个职位作为团体的另一个子类型。指定某个人到一个职位并分配给他一个责任。职位的拥有者在职期间担负这个职位的职责 36 fhfh 分析模式列表 名称 问题 解决方案 数量(Quantity)描述一个数值,如 6英尺或5美元 使用一个包含数字和单位的数量类型。货币是一种单位 转换率(Conversion Ratio)在不同单位的数量之间进行转换 记录单位之间的转换率 复合单位(Compound Units)描述像kg/m2这样的单位 使用一个由其它
11、单位组合而成的单位 37 fhfh 分析模式列表 名称 问题 解决方案 测量(Measurement)一个对象有大量的数量属性;记录关于一个属性的单个测量的信息;跟踪一个属性的数值随时间的变化 创建一个对象来描述一个单独的测量。它与被测量的对象和描述这种测量的现象类型相联系 观察(Observation)属性是定性的,并因而不能用数字来测量 创建一个把对象和现象连接起来的观察类型。每一个现象都是某个现象类型对应的数值 观察概念的子类型化(Subtyping Observation Concepts)有一些现象是另一种现象的特殊情况 允许现象通过知识级中的一个关联进行子类型化 38 fhfh 分
12、析模式列表 名称 问题 解决方案 观察方案(Protocol)当观察的方法偶尔会产生不同的解释时,要处理类似的现象;记录一个测量的精确性和灵敏性 记录用来决定观察的方案 双重时间记录(Dual Time Record)一个观察为真的时刻和你注意到它的时刻是不同,并且一个事件发生的时刻和你注意到它的时刻也是不同的 对所有这样的对象分别记录这两种时刻 被否决的观察(Rejected Observation)观察被错误地执行,但是不能被擦除 保存它们,把它们标记为被否决的,并且记录是什么观察否决了它们 39 fhfh 分析模式列表 名称 问题 解决方案 临床观察、假设与推理(Active Obser
13、vation,Hypothesis,and Projection)观察的确定性;描述那些你认为可能发生的观察,如果你的处理必须基于这种可能性 将观察进行子类型化,变为临床观察(将要处理它)、假设(将要更深入研究它)和推理(认为它可能发生)关联观察(Associated Observation)为诊断记录证据 把诊断作为一个观察,它具有一个关联,连接到作为证据的观察 40 fhfh 分析模式列表 名称 问题 解决方案 观察过程(Process of Observation)确定观察和诊断的过程 每一个观察都可能导致要求进行更多观察和干预的建议,以及对反面性观察的重新评价。因为这些步骤产生更进一步
14、的观察,所以导致一个连续的观察过程 企业片段(Enterprise Segment)用不同的标准和各种粒度把一个大的企业分成碎片 把分隔的每个标准定义为一个维度,并且将它描述为一个元素的层次结构。把一个企业片段定义为每个维度的一个元素的组合 41 fhfh 分析模式列表 名称 问题 解决方案 测量方案(Measurement Protocol)指明测量是计算得到的还是从数据库中读出的;记录计算的公式;同样的现象类型能够用依赖上下文的不同方法来决定 定义一个测量方案,描述如何为一个现象类型创建一个测量。测量方案能够被提供或者计算得到,而计算应当是因果关系的、可比较的或者维度的组合 范围(Rang
15、e)描述两个数值之间的范围 定义一个具有上下界和适当操作的范围类型 42 fhfh 分析模式列表 名称 问题 解决方案 带范围的现象(Phenomenon with Range)把一个现象描述成在一个现象类型上的范围 赋予这个现象一个范围属性;在由其它现象描述的条件下创建一个把范围和现象连接起来的范围函数 名称(Name)引用一个对象 把一个字符串作为对象的名称 标识方案(Identification Scheme)确保一个标识指向一个对象,而不同的团体可以用不同的方式指向对象 创建包含标识符并且每个标识符只指向一个单元的标识方案。一个团体可以使用任何标识方案 43 fhfh 分析模式列表 名
16、称 问题 解决方案 对象合并(Object Merge)两个对象实际上是相同的 把一个对象的属性复制到另一个对象,关闭所有从前者到后者的引用,并且删除前者;把一个对象标志为“被替代”,并且赋予它到另一个对象的连接;把两个对象的出现用一个表名它们相同的本质的对象连接起来 对象等价(Object Equivalence)一些人认为两个对象是相同的,但其他人认为它们不同 为这些对象创建等价关系 44 fhfh 分析模式列表 名称 问题 解决方案 账目(Account)记录某个数量改变的历史 创建一个账目。记录每次改变作为账目的一个条目。账目结算得出账目的当前值 事务(Transaction)确保一个
17、账目没有任何丢失 在账目之间使用事务来传递条目 汇总账目(Summary Account)一组账目看起来就像一个单独的账目 创建一个汇总账目,把其它账目作为它的子账目 45 fhfh 分析模式列表 名称 问题 解决方案 备注账目(Memo Account)不使用事务而把某个数量标记在一个副账目中 创建一个不影响真正事务并且没有真正条目的备注账目 记入规则(Posting Rules)在账目之间自动传递 定义账目之间的一个记入规则 个体实例方法(Individual Instance Method)对一个类型的每个实例,为某个操作赋予它自己独有的方法 为每个方法定义一个singleton类的子类
18、;使用策略模式;创建一个隐藏在对象内部的case语句;用参数分隔不同的行为;建立一个简单的解释器 46 fhfh 分析模式列表 名称 问题 解决方案 记入规则的执行(Posting Rule Execution)确保记入规则都在正确的时间执行 当一个条目被放入一个账目时,激活所有向外的规则;明确地请求激活一条记入规则;请求一个账目激活它向外的记入规则;当需要一个账目时,向后链式触发记入规则 多个账目的记入规则(Posting Rules for Many Accounts)为多个账目定义相同的记入规则 在一个账目类型上定义规则;在一个汇总账目上定义规则 47 fhfh 分析模式列表 名称 问题
19、 解决方案 选择条目(Choosing Entries)向一个账目请求它的条目子集;向一个对象请求它的一个聚合中选择的一些对象 账目返回所有的条目,而且调用者选择它所要的条目;账目为每个可能的子集提供一个操作;调用者通过一个过滤器对象到达账目 账务实践(Accounting Practice)指定几条记入规则组成一组 创建一个账务实践把它们组合起来 条目来源(Sources of an Entry)了解一个事务是如何计算的 用新的事务来记录记入规则的创建和计算中使用的条目 48 fhfh 分析模式列表 名称 问题 解决方案 结算单和所得计算书(Balance Sheet and Income
20、Statement)描述结算单和所得计算书 创建账目的子类 对应账目(Corresponding Account)协调对同一个账目的两个团体的视图 把每个视图作为单独的互相对应的账目 专门化的账目模型(Specialized Account Model)在特殊的情况下使用通用的账务模式 对该模式类型进行子类型化来支持专门化的需求 49 fhfh 分析模式列表 名称 问题 解决方案 登记条目到多个账目(Booking Entries to Multiple Accounts)把一个条目记录到多个账目中 把一个账目作为真正的账目,为另一个账目使用备注账目;把一个账目作为真正的账目,为另一个账目使用
21、派生账目 提议和执行的动作(Proposed and Implemented Action)描述你想要做的和你已经做的 为提议的和执行的动作使用相互独立的对象 完成和放弃的动作(Completed and Abandoned Actions)指明一个动作是如何结束的 一个动作如果按计划执行就是完成的,否则就是放弃的 50 fhfh 分析模式列表 名称 问题 解决方案 挂起(Suspension)把一个动作暂时停止 把挂起记录在一个动作上。用一个时间范围来显示挂起持续的时间 计划(Plan)记录一组你想要一起执行的提议的动作;描述动作之间的依赖性;允许不同的人们互相协调计划 一个计划是用依赖关系
22、连接起来的建议的动作组成的聚合。几个团体可以有不同的计划指向同一个建议的动作 方案(Protocol)很多次以同样的方法执行标志的过程 一个动作可以依据一个方案来执行。一个方案可以分成用依赖关系连接的子方案 51 fhfh 分析模式列表 名称 问题 解决方案 资源分配(Resource Allocation)把资源分配到计划、方案和动作 一般的资源分配分派一个资源类型的一个数量。特定的资源分配分派特定的资源 输出和启动函数(Outcome and Start Functions)知道何时执行一个方案,以及方案或任何动作的结果将是什么 启动函数和输出函数把一个方案和观察概念连接起来 ,这个观察概
23、念触发方案或者方案的结果 合同(Contract)从买方和卖方两者的观点来记录交易 通过买方团体和卖方团体来使用订约人 52 fhfh 分析模式列表 名称 问题 解决方案 合同夹(Portfolio)为不同的目的动态选择合同;动态选择对象 定义一个合同夹作为合同的聚合。选择合同时使用一个过滤器一个决定哪个合同适合合同夹的布尔表达式 报价(Quote)区分购买和出售所提供的价格 把两个价格合并成一个单独的报价 场景(Scenario)交易物的价格随时间而改变;考虑价格的假设组合;一个交易物的价格能够影响另一个交易物的价格 创建一个场景来捕捉真实的和虚拟的市场状态。一个场景提供了当时状态下任何交易
24、物的价格,并且包括了在虚拟市场状态下导出价格的规则 53 fhfh 分析模式列表 名称 问题 解决方案 期货合同(Forward Contracts)一个合同可能在将来以今天的价格交付 使用一个合同时,交易日期和交付日期相互独立 期权(Options)一个团体可能选择在将来的某个时刻以一个事先确定的价格买卖某种东西 期权是合同的一个拥有附加行为的子类型;期权是一个单独的对象,拥有一个合同作为一个属性 产品(Product)一个组合期权被推销员看作一个条目,但是销售商却把它看作较简单的合同的一个聚合;一个推销员看到一个包,但是在包内部只有条目 把一个推销员销售的东西看作一个产品,但把它内部需要估
25、价的一个成分看作一个合同 54 fhfh 分析模式列表 名称 问题 解决方案 子类型状态机(Subtype State Machines)一个关卡期权与一个期权相比有不同的行为,但是它看起来像一个子类型。要处理子类型和状态机 确保子类型和超类型对象对相同的事件都有响应 并行的应用和领域层次结构(Parallel Application and Domain Hierarchies)你在一个用户界面中显示一个对象列表。这些对象是各种不同的子类型,一些子类型属性需要被显示。你的用户界面对象不能因为向一个不正确的对象发送消息而失败 应用对象检查领域对象的类型以确保它能够理解消息;给超类型一个包含所有
26、子类型行为的接口;把属性作为一个运行时属性;使用一个由领域对象装载的中间对象;使用异常处理包 55 fhfh 分析模式列表 名称 问题 解决方案 对一个包的多重访问(Multiple Access Levels to a Package)一个包的不同客户需要不同数目的行为 把包按访问的每一级分成单独的包;允许包有不止一个接口 相互可见性(Mutual Visibility)两个包中的类型需要相互可见 把两个包合并;拥有两个相互可见的包;决定一个类型不能看到另一个类型 包的子类型化(Subtyping Packages)将子类型与包一起使用 子类型可以放在一个单独的包中。对包的可见性适用于超类型
27、,但反之不行 56 fhfh 分析模式列表 名称 问题 解决方案 两层构架(Two-Tier Architecture)在一个客户/服务器系统上划分软件 把用户界面置于客户端,把数据库置于服务器端。用户界面类直接访问数据库 三层构架(Three-Tier Architecture)两层构架把用户界面和数据库设计耦合得太紧密;数据库界面不能支持一个丰富的领域模型 由三个逻辑层:应用、领域、数据库 表示层和应用逻辑层(Presentation and Application Logic)应用软件既处理领域模型的解释又处理导出的用户界面 把应用层分隔成表示层(用户界面)和应用逻辑层(处理领域模型)。
28、把应用逻辑层构造成一组针对表示的外观 57 fhfh 分析模式列表 名称 问题 解决方案 数据库交互(Database Interaction)使用数据库工作 让领域类负责在数据库中保持自己;创建一个单独的层次来处理数据库和领域对象之间的交互 实现关联(Implementing Associations)实现一个概念关联 选择一个方向来实现,使用一个操作和一个指针;在两个方向上都使用操作和指针;在两个方向上都使用操作,另一方向使用查找;在两个方向上都使用操作,对指针使用一个表进行查找 58 fhfh 分析模式列表 名称 问题 解决方案 实现泛化(Implementing Generalizat
29、ions)实现泛化,尤其是在包含多重的和动态的分类时 使用继承;为具有多重继承的子类型的每个组合使用类;使用一个内部标志;委托给一个隐藏类(状态模式);复制和替换 对象创建(Object Creation)创建一个对象 对所有强制的和不可改变的映射都使用一个带参数的创建方法 对象析构(Object Destruction)破坏一个对象 拥有一个专门的析构方法。定义应该在多大程度上级联删除 59 fhfh 分析模式列表 名称 问题 解决方案 入口点(Entry Point)开始寻找对象 让类负责保存和查找它的实例;由一个登记表来查找和保存对象 实现约束(Implementing Constraints)实现约束 给每个对象一个检查其约束的操作。当调试时,在修改者完成后调用它 关联类型(Associative Type)给一个关联增加特征 为关联创建一个类型;使用一个专门的符号 60 fhfh 分析模式列表 名称 问题 解决方案 带键值的映射(Keyed Mapping)在一个映射中描述一些数值,它们的键值是另一个类型 使用一个带键值的映射 历史映射(Historic Mapping)记录一个映射的以前值 使用一个历史映射 61 fhfh 谢谢大家!62 fhfh