1 责任模式
这一章关注的重点是关系,以及怎样为错综复杂的关系建立模型,另外,所有的插图都来自原书(《Analysis Patterns:Reusable Object Models》),并遵循UML标准。
1.1 Party模式
在这一章中,首先我们接触到是是Party模式,在进行系统分析和概念模型设计的时候,经常发现人和各种各样的组织有着同样的行为,例如,固定电话的计费可能是针对个人,也可能是一个单位;需要各种服务的时候,你可能求助于一个服务公司,或者服务公司一个特定的业务员。总之,因为人(Person)和组织(Organization)表现上的一致性,如下图所见,我们从中抽象出Party,作为Person 和Organization的抽象父类。
1.2 组织(Organization)的内部结构
第二步,如果我们把注意力转移到组织(Organization)的内部结构,就会发现一些有趣的问题,通常最常见的一种结构是金字塔结构,因此建模时可能按照这样的结构建立线性的模型,例如:
这样的模型并没有错误,但是有缺陷,首先不能满足比较复杂的组织关系,更严重的是,一旦需要更多的层次关系,例如存在部门直接上下级关系以及区域附属管理方式,必将引起整个模型的更改,对系统的影响可想而知,在这种情况下,最通常的改进措施是引入层次关系,如下图所示:
通过增加新的关联关系,可以灵活实现组织(Organization)之间的各种关系以及可能的变化。在上图中,{hierarchy}是一个约束(constraint)来限定关系。
1.3 组织关系抽象
第三步,在一般的情况下,以上的模式已经足够解决问题,但当这样的层次和组织关系很多而且复杂时(超过两种),例如现在流行的矩阵管理,就可以将关系本身抽取出来独立处理,如下图所示,作者此时考虑到组织结构的有效时段,所以加入了一个时间段属性来记录组织结构的存在时间。
请注意,在这个模式中,Organization Structure才是模式的核心,在系统中,由两个Organization的实例(分别充当parent和subsidiary),以及一个Type实例来说明该结构的类型。在这样的结构中,可能存在许多的规则(Rule),这些规则可以根据情况分别处理:如果Type很多,而且规则主要跟Type有关,就分配给与Type相关联;如果Type并不多,但主要根据Organization的子类型变化,就可以分布到Organization的子类型中。
1.4 责任(Accountability)模式
第四步,从第一步看到,Party是Person和Organization的抽象父类,因此把Party代入上面的模式(有点象我们小时侯代数里常用的代入),正式形成责任(Accountability)模式。
1.5 知识层(Knowledge level)和操作层(Operational level)分离
出现这样一种想法是考虑到以下情况:当Accountablity Type的数量比Accountability的数量多很多的时候,处理Accountablity Type的规则也变得更为复杂,要解决这样的问题,就可以引入知识层和操作层的分离。
由下图可见,用虚线隔离开的,就是知识层(Knowledge level)和操作层(Operational level),在这个模型中,知识层(Knowledge level)由三个类协作完成,它们分别是Accountablity Type、Connection Rule、Party Type,在Connection Rule中定义合法的Party关系规则,并通过Accountablity Type对Accountablity进行创建时的合法性检验。它的另一个好处就是,可以将知识层的实例化独立出来,作为操作层(Operational level)运行时的配置;换句话说,当知识层的规则改变时,系统的行为将被改变,而不需要任何其他代码的改动,这当然是一种比较理想化的情况。
由此想到,构建专家系统的设计思路也可以从这个模式得到一些启发,这是笔者一时的感触。
在原书中,如何实现这样的模型提得比较模糊,但是笔者认为,可以将它们作为正常的模型来实现,两个层次的区分只是表明它们各自担负的任务和地位不同。知识层倾向于描述系统可能存在的各种形式,并设定判断系统是否有效的各种规则;操作层则描述在这样的配置下系统实际的行为。通过改变内在的配置来改变外在的行为,就是这个模式的目的。
由于这个模式的特点,改变系统行为时不必更改操作层的代码,但是,并不意味着改变系统行为连测试也不必要做。同样,也需要调试、配置管理。
作者也提到,这样的模式用起来并不轻松,甚至在一般的系统中也不必要,但当你发现有必要用它的时候,别犹豫(感觉象用降落伞一样)!
1.6 小结
从简单到复杂,前面分五步介绍了适用于解决Party及其关系的各种模式,每种推荐的模式都有其表现的机会,希望我这篇文章可以起到一些抛砖引玉的作用,并欢迎大家对其中的错误进行指正,欢迎发表意见,进行交流。
|
相关推荐
1 责任模式这一章关注的重点是关系,以及怎样为错综复杂的关系建立模型,另外,所有的插图都来自原书(《AnalysisPatterns:ReusableObjectModels》),并遵循UML标准。1.1 Party模式在这一章中,首先我们接触到是...
1 观察和测量(ObservationandMesurements)许多计算机系统记录现实世界中各种对象的信息,这些信息通常表现为计算机系统中的记录、属性、对象等其他各种各样的形式。最典型的方式是把某项信息记录成某个对象的一个...
《分析模式:可复用的对象模型(Analysis.Patterns:Reusable.Object.Models)》是一本深入探讨软件设计中可复用对象模型的重要著作。该书结合了中英文内容,为读者提供了全面的理解和应用分析模式的资源。书中主要关注...
### 分析模式-可重用对象模型 #### 1. 引言 《分析模式-可重用对象模型》是大师Martin Fowler的经典之作,该书深入探讨了面向对象设计中的模式与设计理念。作为一本权威指南,它不仅为软件开发者提供了宝贵的资源...
### 分析模式:可重用对象模型 #### 1. 引言与背景 《分析模式:可重用对象模型》是由著名的软件架构师和作家Martin Fowler撰写的一本经典著作,首次出版于1997年。这本书主要针对的是面向对象计算机系统的分析和...
吉林大学的这门课程——“面向对象建模技术”由柴胜教授讲授,旨在深入讲解如何有效地使用面向对象的方法来理解和分析问题,以及创建能够反映真实世界复杂性的模型。 面向对象建模主要涉及三个关键概念:对象、类和...
#### 六、面向对象设计模型 **6.1 设计模型要素** - **软件体系结构图**:整体框架。 - **用例实现图**:交互过程。 - **类图**:对象关系。 - **状态图**:对象状态变化。 - **活动图**:流程描述。 #### 七、...
总结起来,"设计模式:01工厂模式-labview实现"是一个关于如何在LabVIEW环境中运用工厂模式进行对象创建的例子。通过理解和实践这个模式,开发者可以更好地组织和管理代码,提高软件的灵活性和可维护性。在实际项目...
创建型模式关注于对象的创建机制,这些模式尝试在创建新对象时提供一定的灵活性。 #### 8. 抽象工厂模式(Abstract Factory) 抽象工厂模式提供一个接口,用于创建相关或依赖对象的族,而无需指定它们的具体类。JDK中...
- 系统分析阶段:分析用户需求。 - 系统设计阶段:设计系统架构。 - 系统实施阶段:编写代码和测试。 - 系统验收阶段:用户验收测试。 **7. 原型法特点** - 实际可行:易于实现。 - 具有最终系统的基本特征:能够...
设计模式在软件工程中起着至关重要的作用,它们是经过时间检验的、可重用的解决方案模板,适用于特定的软件设计问题。在这个公交系统模拟项目中,可能涉及到的设计模式包括工厂模式(用于创建不同类型的公交车对象)...
设计模式是软件工程中的一种最佳实践,用于解决常见的设计问题并提供可重用的解决方案。在Android开发中,设计模式的应用对于构建可维护、可扩展的代码至关重要。以下是初中级Android开发社招面试中可能涉及的一些...
这些设计模式有助于创建灵活、可扩展的系统,尤其是当需要处理数据存储和恢复时。例如,通过适配器模式可以将不同的持久化策略集成到系统中,而工厂模式可以帮助动态创建对象,以便在不同条件下使用不同的持久化策略...