方法太长了,方法內局部变量太多,并且繁杂在一起
此时建立一个,方法对象类,局部变量就变成,类的私有字段,原宿主类私有字段,通过原宿主对象传递,再将方法,进行提取为更多小方法。
替换算法
对象间
对象设计
移动字段,移动方法,
提取类,内联并移除类
移动方法非常重要,因为方法代表的就是职责。
用对象取代数值项
简单的例子,一开始,你可能以简单的字符串表示电话号码,可是到后面,逻辑变多复杂,需要灵活维护扩展,你就需要新建电话号码对象。
方法,主要是用来,改变对象的状态,或者,获取对象的状态。要把改变,获取,这两种行为分开。
考虑,你取对象的属性作为一个方法的参数,对比直接传递这个对象?
考虑,调用一个方法获得返回值,然后把这返回值作为参数传给另一个方法,对比在另一个方法里直接调第一个方法?
考虑,有的方法参数总是一起传递,对比把一起传递的参数封装为一个对象?
考虑,对象构建时的常量,readonly
方法,没有公开,就要私有。
考虑,将构造函数改为静态工厂方法,在基类构造子类。
函数返回值,尽量是确切类型,不要object,使用泛型很好。
用异常取代错误码
用检查取代 try catch
字段,方法,移动到父类
父类字段,方法移动到具体子类
相似类,提炼出一个父类
父类,子类合并在一起
组合取代继承
继承取代组合
单一职责,职责暂且就是指方法,职责有大小,职责有粒度,驾驶员开车是职责,开车的具体操作分很多细小的职责。
保安门卫的职责是什么,具体细分的职责是什么。
面对软件开发,初期可能就是从大的职责出发,面对小的职责,可能变化的职责,单独提取出来并封装,保证软件设计的灵活可维护性。
考虑,在需求问题中寻找名词,将名词转换为对象。
面向对象分析,功能分解方法。
功能分解是一种自然的处理复杂问题的方法,所谓大事化小,小事化了。
功能分解,大功能处理步骤,小功能处理步骤,小小功能处理步骤。
功能分解的问题,通常需要主程序控制子程序。
功能分解的问题,应对需求变化的无能为力。
如果一个人关注的东西过多,他是忙不过来的,最终导致关注的事情失败。
如果代码对象关注的东西太多,那后面的需求变更,修改,就坐等bug到来。
未来太多的变化,一切事物都处在变化之中,唯一不变的就是变。
对于一个大方法,更好的方法是分解为更多的小方法。
关注,方法的输入
关注,方法內用到的对象字段
关注,方法是否是对象的职责
低内聚,功能繁杂,和所有对象都似乎有关联,俗称,上帝对象。
我们应该创建的对象是,高内聚,松耦合的对象。
君子生非异也,善假于物也!
超乎能力者不是生来与众不同,而是善于借助外物而已。
网友评论