
重构
canlanyangg
这个作者很懒,什么都没留下…
展开
-
重构定义
名称定义重构:对软件内部结构的一种调整,目的是的不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。动词定义重构:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。原创 2016-08-02 11:04:10 · 639 阅读 · 0 评论 -
重新组织函数(重构手法一)
1,Extract Method (提炼函数) 现象:一段代码可以被组织在一起并独立出来 要点:函数名称与函数本体要表达相同的意思,根据函数意图来命名,而不是怎样做。2,Inline Method (内联函数) 现象:一个函数的本体与名称同样清楚易懂 要点:检查函数,确定没有子类引用它3,Inline Temp (内联临时变量)原创 2016-08-05 13:24:12 · 355 阅读 · 0 评论 -
重新组织函数(重构手法二)
6,Split Temporary Variable (分解临时变量) 现象:程序中某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果 要点:针对每次赋值,创造一个独立,对应的临时变量。7,Remove Assignments to Parameters (移除对参数的赋值) 现象:代码对一个参数进行赋值 要点:以一个临原创 2016-08-08 13:09:01 · 365 阅读 · 0 评论 -
在对象之间搬移特性(二)
6,Remove Middle Man 现象:某个类做了过多的简单委托动作 要点:让客户之间调用受托类。7,Introduce Foreign Method (引入外加函数) 现象:你需要为提供服务的类增加一个函数,但你无法修改这个类 要点:在客户类中建立一个函数,并以第一参数形式传入一个服务类实例。8,Introduce Local原创 2016-08-09 12:55:16 · 540 阅读 · 0 评论 -
处理概括关系(一)
1,Pull Up Field (字段上移) 现象:两个子类拥有相同的字段 做法:将该字段移至超类。2,Pull Up Method (函数上移) 现象:有些函数,在各个子类中产生完全相同的结果 做法:将该函数移至超类。3,Pull Constructor Boby (构造函数本体上移) 现象:你在各个子类中拥有一些构造原创 2016-08-11 16:43:55 · 342 阅读 · 0 评论 -
处理概括关系(二)
6,Extract Subclass (提炼子类) 现象:类中的某些特性只被某些(而非全部)实例用到 做法:新建一个子类,将上面所说的那一部分特性移到子类中。7,Extract Superclass (提炼超类) 现象:两个类有相似特性 做法:为这两个类建立一个超类,将相同特性移至超类。8,Extract Interface (提炼接原创 2016-08-11 17:11:27 · 267 阅读 · 0 评论 -
代码的坏味道(二)
11,Parallel Inheritance Hierarchies (平行继承体系)12,Lazy Class (冗赘类)13,Speculative Generality (卡卡其谈未来性)14,Temporary Field (令人迷惑的临时字段)15,Message Chains (过度耦合的消息链)16,Middle Man (中间人)17,Inappropri原创 2016-08-04 13:29:18 · 300 阅读 · 0 评论 -
代码的坏味道(一)
1,Duplicated Code (重复代码) a,同类中两个函数中有相同的表达式 b,互为兄弟类有相同的表达式,将相同代码提到超类中2,Long Method (过长函数) 当你觉得需要写注释时,就需要建立一个独立的子函数,条件表达式和循环也是提炼的信号 一定要为子函数取一个好名字3,Large Class (过大的类)4,Lon原创 2016-08-04 13:11:25 · 503 阅读 · 0 评论 -
可变数组 移除数据项
- (void)removeRoute:(NSString *)routePattern{ NSInteger routeIndex = NSNotFound; NSInteger index = 0; for (JLRRouteDefinition *route in [self.routes copy]) { if ([rout原创 2017-03-03 10:05:35 · 241 阅读 · 0 评论 -
webview httpheader 添加字段
self.request=request; NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; if(kUserTokenInMemory.length >0){ [mutableRequest addValue:kUserTokenInMemory原创 2017-03-22 16:30:20 · 593 阅读 · 0 评论 -
简化函数调用(三)
11,Hide Method (隐藏函数) 现象:有一个函数,从来没有被其他任何类用到 做法:将这个函数修改为private。12,Replace Constructor With Factory Method (以工厂函数取代构造函数) 现象:你希望在创建对象时不仅仅是做简单的建构动作 做法:将构造函数替换为工厂函数。13,原创 2016-08-11 13:20:33 · 306 阅读 · 0 评论 -
简化函数调用(二)
6,Replace Parameter With Explicit Methods (以明确函数取代参数) 现象:你有一个函数,其中完全取决于参数值而采用不同行为 要点:针对该参数的每一个可能值,建立一个独立函数。7,Preserve Whole Object (保持对象完整) 现象:你从某个对象中取出若干值,将它们作为某一次函数调用时的参数原创 2016-08-11 13:03:22 · 272 阅读 · 0 评论 -
简化函数调用(一)
1,Rename Method (函数改名) 现象:函数的名称未能揭示函数的用途 要点:修改函数名称。2,Add Parameter (添加参数) 现象:某个函数需要从调用端得到更多信息 要点:为此函数添加一个对象参数,让该对象带进函数所需信息。3,Remove Parameter (移除函数) 现象:函数本体不再需要某原创 2016-08-10 18:05:29 · 321 阅读 · 0 评论 -
为何重构
1,重构改进软件设计2,重构使软件更容易理解3,重构帮助找出bug4,重构提高编程速度原创 2016-08-02 11:15:38 · 220 阅读 · 0 评论 -
何时重构
1,事不过三,三则重构2,添加功能时重构3,修补错误时重构4,复审代码时重构原创 2016-08-02 12:17:03 · 340 阅读 · 0 评论 -
何时不重构
1,现有代码根本不能正常工作2,现有代码过于复杂,重构它还不如重新写一个新的简单3,项目已接近最后期限原创 2016-08-02 12:20:30 · 325 阅读 · 0 评论 -
在对象之间搬移特性(一)
1,Move Method (搬移函数) 现象:程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用后者或被后者调用 要点:在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。2,Move Field (搬移字段) 现象:程序中,有个字段被其所驻类之外的另一个类更多的用到 要点:原创 2016-08-08 13:56:30 · 582 阅读 · 0 评论 -
重新组织数据(一)
1,Self Encapsulate Field (自封装自段) 现象:你直接访问一个字段,但与字段直接的耦合关系逐渐变得笨拙 要点:为这个字段建立取值/设置函数,并且只以这些函数来访问字段。2,Replace Data Value With Object (以对象取代数据值) 现象:你有一个数据项,需要与其他数据和行为一起使用才有意义原创 2016-08-09 13:46:27 · 397 阅读 · 0 评论 -
重新组织数据(二)
6,Duplicate Observed Data (复制 “被监视数据”) 现象:你有一些领域数据置身于GUI控件中,而领域函数需要访问这些数据 要点:将该数据复制到一个领域对象中。建立一个Observer模式,用以同步领域对象和GUI对象内的重复数据。7,Change Unidirectional Association To Bidirectional (将单原创 2016-08-09 18:27:12 · 280 阅读 · 0 评论 -
重新组织数据(三)
11,Encapsulate Collection (封装集合) 现象:有个函数返回一个集合 要点:让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数。12,Replace Record With Data Class (以数据类取代记录) 现象:你需要面对传统编程环境中的记录结果 要点:为该记录原创 2016-08-10 13:11:13 · 397 阅读 · 0 评论 -
简化条件表达式(一)
1,Decompose Conditional (分解条件表达式) 现象:你有一个复杂的条件语句 要点:从if,else两个段落中分别提炼出独立的函数。2,Consolidate Conditional Expression (合并条件表达式) 现象:你有一系列条件测试,都得到相同结果 要点:将这些测试合并为一个条件表达式,并将这个条件表原创 2016-08-10 13:49:56 · 405 阅读 · 0 评论 -
简化条件表达式(二)
6,Replace Conditional With Polymorphism (以多态取代条件表达式) 现象:你手上有个条件表达式,它根据对象类型的不同而选择不同的行为。 要点:将这个条件表达式的每个分支放进一个子类内的赋写函数中,然后将原始函数声明为抽象函数。7,Introduce Null Object (引入Null对象) 现象:你需要再三检查原创 2016-08-10 17:45:29 · 250 阅读 · 0 评论 -
runtime 对 viewcontroller属性赋值
-(void)paramToVc:(UIViewController *) v param:(NSDictionary *)parameters{ // runtime将参数传递至需要跳转的控制器 unsigned int outCount = 0; objc_property_t * properties = class_copyPropertyLis原创 2017-03-03 11:17:19 · 424 阅读 · 0 评论