zoukankan      html  css  js  c++  java
  • 面向对象设计与实用的思考(主动对象与被动对象)

    在项目中遇到这么一个问题,相信很多做过一点架构设计的都遇到过。

    以一个最常用的工作流为例,有审批者——被审批的申请--审批动作

    按照面向对象思想,应该是先new 一个审批者,审批者执行审批动作

    Auditer auditer=new Auditer("John");

    Apply oneApply=new HolidayApply();//休假 HolidayApply:Apply

    auditer.Audit(oneApply);

    public class Auditer

    {

    private string uid;

    public Auditer(string userid)

    {uid= userid;}

    public bool Audit(Apply)

    {...}

    }

    如果我们审批的不是休假,而是业务招待费呢,那么

    public bool Audit(Apply)

    { switch(xx)

    {case "A":

    ...

    case B :

    ..}}是一种方案,但如果申请几十个上百个就很难维护了

    与其如此,我们把Audit这个方法移到被审批的申请这个对象中

    Auditer auditer=new Auditer("John");

    Apply oneApply=new HolidayApply();//休假 HolidayApply:Apply

    oneApply.BeAudit(auditer);

    这样就很简单的解决了这个问题

     
    在现实中,理论上应该这样表达

    public class Auditer

    {

    private string uid;

    public Auditer(string userid)

    {uid= userid;}

    public bool Audit(Apply apply)

    {apply.BeAudit(uid)}

    } 即审批者依赖于被审批申请,

    由于使用关系数据库为主等原因,我们把对象属性称为实体,把对象行为集合在一起成为对象的类

    这或许就是当前中庸之道的选择吧

    推出适合的道理,对象自身的属性放在对象本类中

    如果两个对象作用,这一动作放在被改变的对象类中

    都被改变了的话,分解这一动作,小明给墙刷红色油漆;结果墙变成了红色,油漆桶里面的油漆变少了。

    Wall.ChangeColor("red");

    OilBucket.Reduce(100);

    即是分别放在各自对象类中。

  • 相关阅读:
    Levmar 配置
    函数前加static与不加static的区别
    关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决
    Latex 算法Algorithm
    matlab 曲线拟合
    生成eps图形
    libSVM在matlab下的使用安装
    spring 事务管理笔记
    集合框架
    小程序 滑动弹窗阻止主页面滑动
  • 原文地址:https://www.cnblogs.com/tobase/p/3613897.html
Copyright © 2011-2022 走看看