zoukankan      html  css  js  c++  java
  • 7.6 GRASP原则六: 多态 Polymorphism

    GRASP原则六: 多态 Polymorphism
       How to handle alternative behaviors based on type 如何处理依据类型不同而有 不同行为的一类需求 ?

         比如,开餐馆

           苏州人喜欢甜、四川人喜欢麻、湖南人喜欢辣,咋处理 ?
    1.1 9条GRASP原则

       Information Expert

         responsibilities should be assigned to objects that contain relevant information

       Creator

         the creator of an object is usually an object that contains, or aggregates it

       High Cohesion

         responsibilities of a certain class must be highly related

       Low Coupling

         interdependency between classes should remain low

       Controller

         class which handles external system events

       Polymorphism 多态原则

       Indirection 间接原则

       Pure Fabrication 纯虚构原则

       Protected Variations 隔离变化
    1.2 Iteration 2 More Requirement

       第一次迭代结束时,完成了

         当前软件功能测试:单元测试、用户可接受测试、负载测试、可使用性测试等

         必须有客户加入,并给出反馈 Customers engaged in and feedback

         把基线稳定下来,发布内部版本 stabilized baseline internal release

       第二次迭代时,要考虑加入新的功能

         需求变化、业务规则细化、考虑更多的用例

         制定本次迭代的计划活动等

         Ex, Monopoly game

           When a player lands on the Go square, the player receives $200

           When a player lands on the Go-To-Jail square, they move to the Jail square

           When a player lands on the Income-Tax square, the player pays the minimum of $200 or 10%

            of their worth
    1.2 Iteration 2 More Requirement

       例如POS系统,第二次迭代时增加另外的需求

         支持多种第三方服务的接口 Support for variations in third-party external services

           计算税费、信用卡授权认证等

         复杂的定价机制 Complex pricing rules

         可插拔的业务规则 Pluggable business rules

         GUI窗口在信息发生变化时得到更新 GUI window updates when information changes

       这些功能点,可能属于前轮迭代同样的用例,但更多的是讨论非功能性需求

       这些需求对领域模型的影响较小

       同样一项功能,原来一种处理方法就可以,现在需要适应多种处理方法,设 计方案该如何支持?

         比如付费:现金、储蓄卡、信用卡、支付宝、微信
    1.3 GRASP rule6: Polymorphism(多态)

       Name: Polymorphism(多态)

       Problem:

         如何处理依据类型不同而有不同行为的一类需求?

        How to handle alternative behaviors based on type?

        How to create pluggable software components?

       Solution:

         使用多态操作为依据类型变化的行为 进行职责分配

          When related alternatives or behaviors vary by type (class), assign responsibility for the

          behavior using polymorphic operations to the types for which the behavior varies

       Corollary(推论):

         不要去测试对象的类型或者条件逻辑,并以此选择相应的行为

          Do not test for the type of an object and use conditional logic to perform varying alternatives

          based on type

         即,不要使用条件逻辑,而是为不同的类定义相同名字的方法

          That is, don’t use conditional logic, but assign the same name to services (methods) in

          different classes

         不同的类实现了相同的接口、或者有一个共同的父类(继承)The different classes usually

          implement a common interface or are related in an implementation hierarchy with a

          common superclass

  • 相关阅读:
    mysql监控优化(一)连接数和缓存
    mysql数据库的备份与恢复
    python学习笔记(十八)网络编程之requests模块
    python学习笔记(十七)网络编程之urllib模块
    python学习笔记(十六)内置函数zip、map、filter的使用
    python学习笔记(十五)异常处理
    python 学习笔记(十四)有依赖关系的接口开发
    如何使用django中的cookie和session?
    django Form表单的使用
    django 中模板语言的各种用法
  • 原文地址:https://www.cnblogs.com/mayZhou/p/10550045.html
Copyright © 2011-2022 走看看