步步为营 .NET 代码重构学习笔记 八
一、Introduce Foreign Method(引入外加函数)
动机(Motivation)
在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。
示例
DateTime newStart = DateTime.Now.AddDays(1);改为
public DateTime NextDate()
{
return DateTime.Now.AddDays(1);
}二、Introduce Local Extension(引入本地扩展)动机(Motivation)
建立一个新class,使它包含这些额外函数。让这个扩展品成为source class的subclass(子类)或wrapper(外覆类)。
示例
protected void Main()
{
Computer _computer;
StringBuilder strCom = new StringBuilder();
strCom.AppendLine("你的电脑配置如下:");
strCom.AppendLine("主板是:" + _computer.MainBoard());
strCom.AppendLine("处理器是:" + _computer.Cpu());
strCom.AppendLine("显卡是:" + _computer.PhenoType());
strCom.AppendLine("内存是:" + _computer.Memory());
strCom.AppendLine("硬盘是:" + _computer.HardDisk());
strCom.AppendLine("显示器是:" + _computer.Display());
strCom.AppendLine("己组装完成");
Console.WriteLine(strCom.ToString);
}改为protected void Main()
{
Console.WriteLine(ShowComputerConfigure());
}public string ShowComputerConfigure()
{
Computer _computer;
StringBuilder strCom = new StringBuilder();
strCom.AppendLine("你的电脑配置如下:");
strCom.AppendLine("主板是:" + _computer.MainBoard());
strCom.AppendLine("处理器是:" + _computer.Cpu());
strCom.AppendLine("显卡是:" + _computer.PhenoType());
strCom.AppendLine("内存是:" + _computer.Memory());
strCom.AppendLine("硬盘是:" + _computer.HardDisk());
strCom.AppendLine("显示器是:" + _computer.Display());
strCom.AppendLine("己组装完成");return strCom.ToString();
}三、Self Encapsulate Field(自封装值域)动机(Motivation)
为这个值域建立取值/设置函数(getting/setting methods),并且只以这些函数来访问值域。
示例
public int _low, _high;
public bool Includes(int arg)
{
return arg >= _low && arg <= _high;
}改为private int _low, _high;
public int Low
{
get { return _low; }
set { _low = value; }
}public int High
{
get { return _high; }
set { _high = value; }
}public bool Includes(int arg)
{
return arg >= Low && arg <= High;
}四、Replace Data Value with Object(以对象取代数据值)动机(Motivation)
将数据项变成一个对象
示例
public class Customer
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}改为public class Customer
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Customer(string name)
{
this._name = name;
}
}引用时string name = new Customer("spring yang");五、Change Value to Referencce(将实值对象改为引用对象)
动机(Motivation)
将value object(实值对象)变成一个reference object(引用对象)
示例
public void GetCustomers()
{
string[] UserName = { new Customer("Spring Yang"), new Customer("Lemon Car"), new Customer("Associated Coffee") };
}改为private Dictionary<string, Customer> dicUserName = new Dictionary<string, Customer>();
public void GetCustomers()
{
string[] UserName = { dicUserName.TryGetValue("Spring Yang"), dicUserName.TryGetValue("Lemon Car"),
 
补充:Web开发 , ASP.Net ,