最病 A Anti-Patterns n Andrew Koenig 1995, Michael Akroyd 1996 口 An anti- pattern(反面模式) tells you how to go from a problem to a BAD solution. a Tell you why a bad solution is attractive. a Tell you why that solution in the long term is bad a Suggest other patterns that are applicable which may provide good solutions. Wik Institute of Computer Software 2021/2/7 Nanjing University
Anti-Patterns Andrew Koenig 1995, Michael Akroyd 1996 An anti-pattern (反面模式) tells you how to go from a problem to a BAD solution. Tell you why a bad solution is attractive. Tell you why that solution in the long term is bad. Suggest other patterns that are applicable which may provide good solutions. 2021/2/7 Institute of Computer Software Nanjing University 17 Wiki
反面模式分类 口组织结构的反面模式 口项目管理的反面模式 Anemic Domain model 口团队管理的反面模式 Base Bean 口分析方式的反面模式 Call super Circle-ellipse problem 口一般设计上的反模式 Empty subclass failure God object 口面向对象设计的反面模式 C Object cesspool Object orgy 编程上的反模式 Poltergeists Sequential coupling 方法学上的反面模式 Singletonities Yet another fucking layer 口测试反面模式 Yo-yo problem 口配置管理反面模式 Institute of Computer Software 2021/2/7 Nanjing University
反面模式分类 组织结构的反面模式 项目管理的反面模式 团队管理的反面模式 分析方式的反面模式 一般设计上的反模式 面向对象设计的反面模式 编程上的反模式 方法学上的反面模式 测试反面模式 配置管理反面模式 2021/2/7 Institute of Computer Software Nanjing University 18 Anemic Domain Model BaseBean Call super Circle-ellipse problem Empty subclass failure God object Object cesspool Object orgy Poltergeists Sequential coupling Singletonities Yet another fucking layer Yo-yo problem
最病 Exampl e 口胖球反模式 口通过描述一个或几个类不断的膨胀,以至吞食掉整个面向对 象架构。一般胖球的出现是由于一个类垄断了处理过程,而 其他的类只是数据的封装体 症状和后果 ■单个类拥有大量的属性或操作。 ■单个类中封装了异类的、不相关的属性和操作集。 单个控制器类和几个简单的数据对象联系在一起。 缺乏面向对象的设计,一个控制器类几乎封装了所有的应用 功能 ■控制器类通常过于复杂,无法复用和测试。 把这么个大类加载如内存中的代价可能会很高 口胖球反模式有两种形式:行为形式和数据形式。 Institute of Computer Software 2021/2/7 Nanjing University
Example 胖球反模式 通过描述一个或几个类不断的膨胀,以至吞食掉整个面向对 象架构。一般胖球的出现是由于一个类垄断了处理过程,而 其他的类只是数据的封装体。 症状和后果 ◼ 单个类拥有大量的属性或操作。 ◼ 单个类中封装了异类的、不相关的属性和操作集。 ◼ 单个控制器类和几个简单的数据对象联系在一起。 ◼ 缺乏面向对象的设计,一个控制器类几乎封装了所有的应用 功能。 ◼ 控制器类通常过于复杂,无法复用和测试。 ◼ 把这么个大类加载如内存中的代价可能会很高。 胖球反模式有两种形式:行为形式和数据形式。 2021/2/7 Institute of Computer Software Nanjing University 19
最病 Exampl e 口如何重构( Refactor) 口把一些行为重新分配到某些封装了数据的对象上,并对 对象之间的关系重新调整。 确定代表契约的关系操作和属性集合,也就是把相关的属性和 方法归类。 寻找这些根据契约的到了集合的“自然的家”,并把它们迁移 过去。 移除所有的“远耦合”或者说冗余的、间接的联系。 最后,移除所有的瞬时联系 总之,把一个控制器类变成了一个协调器类,让开始的 数据类扩充一些处理逻辑,数据类在协调类的指导下进 行操作,这也只是职责的迁移。 Institute of Computer Software 2021/2/7 Nanjing University
Example 如何重构 (Refactor) 把一些行为重新分配到某些封装了数据的对象上,并对 对象之间的关系重新调整。 ◼ 确定代表契约的关系操作和属性集合,也就是把相关的属性和 方法归类。 ◼ 寻找这些根据契约的到了集合的“自然的家”,并把它们迁移 过去。 ◼ 移除所有的“远耦合”或者说冗余的、间接的联系。 ◼ 最后,移除所有的瞬时联系。 总之,把一个控制器类变成了一个协调器类,让开始的 数据类扩充一些处理逻辑,数据类在协调类的指导下进 行操作,这也只是职责的迁移。 2021/2/7 Institute of Computer Software Nanjing University 20
最病 o More about Pattern 口 Patterns of patterns 口Anti- pattern O J2EE patterns Institute of Computer Software 2021/2/7 Nanjing University
More about Pattern Patterns of Patterns Anti-pattern J2EE patterns 2021/2/7 Institute of Computer Software Nanjing University 21