重构第16天 封装条件(Encapsulate Conditional)
2016-04-07 11:05
162 查看
理解:本文中的“封装条件”是指条件关系比较复杂时,代码的可读性会比较差,所以这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法。
详解:重构前code
PerformCoolFunction里面的if条件判断比较复杂,看起来有点杂乱,所以就把它提出来。
重构后代码:
我们把条件表达式封装成HasExtraFunctions属性,这样先前的条件判断就成了if (HasExtraFunctions) ,所以这样就在很大程度上提高了可读性。
这个重构在很大程度上能改善代码的可读性,尤其是在一个逻辑很复杂的应用中,把这些条件判断封装成一个有意义的名字,这样很复杂的逻辑也会立刻变得简单起来。
详解:重构前code
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace ReflectorDemo { public class RemoteControl { private string[] Functions { get; set; } private string Name { get; set; } private int CreatedYear { get; set; } public string PerformCoolFunction(string buttonPressed) { // Determine if we are controlling some extra function // that requires special conditions if (Functions.Length > 1 && Name == "RCA" && CreatedYear > DateTime.Now.Year - 2) return "doSomething"; return string.Empty; } } }
PerformCoolFunction里面的if条件判断比较复杂,看起来有点杂乱,所以就把它提出来。
重构后代码:
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace ReflectorDemo { public class RemoteControl { private string[] Functions { get; set; } private string Name { get; set; } private int CreatedYear { get; set; } private bool HasExtraFunctions { get { return Functions.Length > 1 && Name == "RCA" && CreatedYear > DateTime.Now.Year - 2; } } public string PerformCoolFunction(string buttonPressed) { // Determine if we are controlling some extra function // that requires special conditions if (HasExtraFunctions) return "doSomething"; return string.Empty; } } }
我们把条件表达式封装成HasExtraFunctions属性,这样先前的条件判断就成了if (HasExtraFunctions) ,所以这样就在很大程度上提高了可读性。
这个重构在很大程度上能改善代码的可读性,尤其是在一个逻辑很复杂的应用中,把这些条件判断封装成一个有意义的名字,这样很复杂的逻辑也会立刻变得简单起来。
相关文章推荐
- 配置red hat的ip 自动地址
- 2016.4.07定义一个spring注释注入
- Ubuntu Android Studio 报错unable to run mksdcard sdk
- python dict 赋值传指针
- js长轮询与短轮询的简单理解
- 自己在web开发遇到的问题
- maven中snapshot快照库和release发布库的区别和作用
- html canvas 自适应
- 【ZOJ 1942】【POJ 2253】 Frogger
- cocos2d-Lua03环境搭建及基本概念
- c++第三次上机实验
- 4.4.2 single_server_accept_inet函数:接收网络请求
- 随笔---java中hashMap工作原理的总结
- C++实验3-多分数段函数求值
- Android中自定义SwipeRefreshLayout的实现
- C++作业2-分段函数求值,两点讲的距离,模拟ATM
- 小知识点8
- 多个站点单点登录的设计思路
- SQL Server 使用日志传送
- PHP安全下载文件的方法