(转)《分析模式:可重用对象模型》-- 责任模式
1 责任模式 1.1 Party模式
1.2 组织(Organization)的内部结构 这样的模型并没有错误,但是有缺陷,首先不能满足比较复杂的组织关系,更严重的是,一旦需要更多的层次关系,例如存在部门直接上下级关系以及区域附属管理方式,必将引起整个模型的更改,对系统的影响可想而知,在这种情况下,最通常的改进措施是引入层次关系,如下图所示: 通过增加新的关联关系,可以灵活实现组织(Organization)之间的各种关系以及可能的变化。在上图中,{hierarchy}是一个约束(constraint)来限定关系。 1.3 组织关系抽象 请注意,在这个模式中,Organization Structure才是模式的核心,在系统中,由两个Organization的实例(分别充当parent和subsidiary),以及一个Type实例来说明该结构的类型。在这样的结构中,可能存在许多的规则(Rule),这些规则可以根据情况分别处理:如果Type很多,而且规则主要跟Type有关,就分配给与Type相关联;如果Type并不多,但主要根据Organization的子类型变化,就可以分布到Organization的子类型中。 1.4 责任(Accountability)模式 1.5 知识层(Knowledge level)和操作层(Operational level)分离 由下图可见,用虚线隔离开的,就是知识层(Knowledge level)和操作层(Operational level),在这个模型中,知识层(Knowledge level)由三个类协作完成,它们分别是Accountablity Type、Connection Rule、Party Type,在Connection Rule中定义合法的Party关系规则,并通过Accountablity Type对Accountablity进行创建时的合法性检验。它的另一个好处就是,可以将知识层的实例化独立出来,作为操作层(Operational level)运行时的配置;换句话说,当知识层的规则改变时,系统的行为将被改变,而不需要任何其他代码的改动,这当然是一种比较理想化的情况。
由此想到,构建专家系统的设计思路也可以从这个模式得到一些启发,这是笔者一时的感触。 在原书中,如何实现这样的模型提得比较模糊,但是笔者认为,可以将它们作为正常的模型来实现,两个层次的区分只是表明它们各自担负的任务和地位不同。知识层倾向于描述系统可能存在的各种形式,并设定判断系统是否有效的各种规则;操作层则描述在这样的配置下系统实际的行为。通过改变内在的配置来改变外在的行为,就是这个模式的目的。 由于这个模式的特点,改变系统行为时不必更改操作层的代码,但是,并不意味着改变系统行为连测试也不必要做。同样,也需要调试、配置管理。 作者也提到,这样的模式用起来并不轻松,甚至在一般的系统中也不必要,但当你发现有必要用它的时候,别犹豫(感觉象用降落伞一样)! 1.6 小结
|