如果一个方法中包含多个布尔类型的参数,一是方法不容易理解,二是调用时容易出错. 重构前代码 public class BankAccount { public void CreateAccount(Customer customer, bool withChecking, bool withSavings, bool withStocks) { // do work } } 重构后代码 public class BankAccount { public void CreateAccountWit…
详解:本文中的”为布尔方法命名”是指如果一个方法带有大量的bool 参数时,可以根据bool 参数的数量,提取出若干个独立的方法来简化参数. 理解: 我们现在要说的重构并不是普通字面意义上的重构,它有很多值得讨论的地方.当一个方法带有大量的bool 参数时,会导致方法很容易被误解并产生非预期的行为, 根据布尔型参数的数量,我们可以决定提取出若干个独立的方法来.具体代码如下: public class BankAccount { public void CreateAccount(Customer…
php中添加utf-8: header("Content-type:text/html;charset='UTF-8'"); 文件操作步骤: 1.在同一目录下建立一个file.txt的文件夹 2.打开文件 $res = fopen("file.txt","r");//打开文件路径,打开后是个资源,需要进一步处理;//r为只读的意思 3.读取文件 $str= fread($res,300);//第二个参数为读取的长度(每个汉字的长度为3) $str…
  Oracle 11.2.0.2里新增了一个新特性——用户重命名(Rename User),在这个版本之前要想重命名用户,需要按用户导出,再fromuser touser(imp)或remap_schem(impdp).还可以通过修改数据字典user$的方式来重命名用户,但这种方法可能会带来风险.有了这个特性之后,可以通过alter user oldname rename to newname identified by "password";一条命令来重命名用户. 下面来看测试过程…
你也可以说这并不是一个真正的重构,因为方法实际上改变了,但这是一个灰色地带,可以开放讨论.一个拥有大量布尔类型参数的方法将很快变得无法控制,产生难以预期的行为.参数的数量将决定分解的方法的数量.来看看该重构是如何开始的: public class BankAccount { public void CreateAccount(Customer customer, boolean withChecking, boolean withSavings, boolean withStocks) { //…
理解:如果一个功能,里面比较复杂,代码量比较多,我们就可以把这个功能分解成多个小的method,每个方法实现该功能的一个小小的部分,并且方法命名成容易理解,和方法内容相关的名称,更有助于维护和可读性提高. 详解: 重构前代码: using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace ReflectorDemo…
理解:经常写的代码中,有一些计算逻辑比较复杂的方法,写下来一个很长很长的方法,我们可以把这个方法,根据功能,分解成单独的几个小方法.这样做不仅能够增加代码的可维护性,而且增加了易读性. 详解: 重构前代码: public class Receipt { private IList<decimal> Discounts { get; set; } private IList<decimal> ItemTotals { get; set; } public decimal Calcul…
理解:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性. 详解:如下代码所示,Order 类中的Calculate方法要完成很多功能,在之前我们用“提取方法”来进行重构,现在我们采取“提取方法对象”来完成重构. 重构前代码: using System; using System.Collections.Generic; using System.Linq; using…
当代码中有多层嵌套时,会降低代码的可读性,对于以后的修改也增加难度,所以我们需要分解复杂的判断并尽快返回. 重构前代码 public class Security { public ISecurityChecker SecurityChecker { get; set; } public Security(ISecurityChecker securityChecker) { SecurityChecker = securityChecker; } public bool HasAccess(U…
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用.   当代码中包含许多条件判断,为了改善代码的可读性和可维护性,我们可以将条件封装. 有两种封装方式: 一.无参数的条件判断,封装为属性   重构前代码 public class RemoteControl { private string[] Functions { get; set; } private stri…