Chinaunix首页 | 论坛 | 博客
  • 博客访问: 328930
  • 博文数量: 100
  • 博客积分: 2620
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-16 02:50
文章分类

全部博文(100)

文章存档

2011年(5)

2010年(12)

2009年(83)

分类:

2009-12-02 23:50:50

关于重构 之三
 
(1)两段相似的代码,获取可以提炼出template method
(2)面向对象的世界里,常常充满了委托(delegation)
(3)当感觉需要以注释来说点什么的时候,我们就需要把说明的东西写到一个单独的函数
中,并以其用途命名。
(4)提取函数的信号:1.注释出现的地方。2.if--else / 循环
(5)提取函数时导致大量的临时变量传入到新函数,可以使用replace temp with query
或者introduce parameter object ...
(6)类的分拆和提炼,把一起变化的东西放在一起(数据,行为。。)
(7)一个类的变化只应该有一种原因。
(8)如果每遇到某种变化,都需要在许多不同的class中作出修改以响应变化,此时应该
考虑使用move method 和move field将需要修改的代码放在一起。(现在的协议添加就是
这样的情况:encode/decode ,dump,msgbody,msgid,msg_error,分别放在了不同的地方,
omg)
(9)综合(7)(8)即是,一个class受多个变化的影响,一个变化引发多个class修改。
(10)用多肽替换switch-case(Replace Conditional with Polymorphism)
  
构想:
 协议部分可以采用这种方式:定义protocol类表示协议,定义抽象类
protocol_type,各种不同的具体协议由protocol_type继承下来,然后protocol握住一个
protocol_type的指针,表明protocol是什么类型。
 但是从网络上收到消息之后还是需要switch来辨别是什么类型的消息,才能产生
特定的protocol_type(这个可以考虑放到一个工厂方法中统一产生,有新协议时也只修改
工厂)。
 可以考虑market中的单件,打包,道具等不同类别的商品采用多肽来消除
switch-case。
阅读(671) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~