好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

步步为营 .NET 代码重构学习笔记 八

步步为营 .NET 代码重构学习笔记 八

一、Introduce Foreign Method(引入外加函数)

动机(Motivation)

在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。

示例

1 DateTime newStart = DateTime.Now.AddDays(1);

改为

1 public DateTime  NextDate()

2 {

3      return   DateTime.Now.AddDays(1);

4    

5 }

二、Introduce Local Extension(引入本地扩展)

动机(Motivation)

建立一个新class,使它包含这些额外函数。让这个扩展品成为source class的subclass(子类)或wrapper(外覆类)。

示例

01 protected void Main()

02 {

03      Computer _computer;

04      StringBuilder strCom = new StringBuilder();

05      strCom.AppendLine( "你的电脑配置如下:" );

06      strCom.AppendLine( "主板是:" + _computer.MainBoard());

07      strCom.AppendLine( "处理器是:" + _computer.Cpu());

08      strCom.AppendLine( "显卡是:" + _computer.PhenoType());

09      strCom.AppendLine( "内存是:" + _computer.Memory());

10      strCom.AppendLine( "硬盘是:" + _computer.HardDisk());

11      strCom.AppendLine( "显示器是:" + _computer.Display());

12      strCom.AppendLine( "己组装完成" );

13      Console.WriteLine(strCom.ToString);

14 }

改为

01 protected void Main()

02       {

03           Console.WriteLine(ShowComputerConfigure());

04       }

05  

06       public string ShowComputerConfigure()

07       {

08           Computer _computer;

09           StringBuilder strCom = new StringBuilder();

10           strCom.AppendLine( "你的电脑配置如下:" );

11           strCom.AppendLine( "主板是:" + _computer.MainBoard());

12           strCom.AppendLine( "处理器是:" + _computer.Cpu());

13           strCom.AppendLine( "显卡是:" + _computer.PhenoType());

14           strCom.AppendLine( "内存是:" + _computer.Memory());

15           strCom.AppendLine( "硬盘是:" + _computer.HardDisk());

16           strCom.AppendLine( "显示器是:" + _computer.Display());

17           strCom.AppendLine( "己组装完成" );

18  

19           return strCom.ToString();

20       }

三、Self Encapsulate Field(自封装值域)

动机(Motivation)

为这个值域建立取值/设置函数(getting/setting methods),并且只以这些函数来访问值域。

示例

1 public   int _low, _high;

2 public bool Includes( int arg)

3 {

4      return arg >= _low && arg <= _high;

5 }

改为

01 private int _low, _high;

02  

03 public int Low

04 {

05      get { return _low; }

06      set { _low = value; }

07 }

08  

09 public int High

10 {

11      get { return _high; }

12      set { _high = value; }

13 }

14  

15 public bool Includes( int arg)

16 {

17      return arg >= Low && arg <= High;

18 }

四、Replace Data Value with Object(以对象取代数据值)

动机(Motivation)

将数据项变成一个对象

示例

1 public class Customer

2 {

3      private string _name;

4      public string Name

5      {

6          get { return _name; }

7          set { _name = value; }

8      }

9 }

改为

01 public class Customer

02 {

03      private string _name;

04      public string Name

05      {

06          get { return _name; }

07          set { _name = value; }

08      }

09      public Customer( string name)

10      {

11          this ._name = name;

12      }

13 }

引用时

1 string name = new Customer( "spring yang" );

五、Change Value to Referencce(将实值对象改为引用对象)

动机(Motivation)

将value object(实值对象)变成一个reference object(引用对象)

示例

1 public void GetCustomers()

2 {

3      string [] UserName = { new Customer( "Spring Yang" ), new Customer( "Lemon Car" ), new Customer( "Associated Coffee" ) };

4 }

改为

01 private Dictionary< string , Customer> dicUserName = new Dictionary< string , Customer>();

02  

03         public void GetCustomers()

04         {

05             string [] UserName = { dicUserName.TryGetValue( "Spring Yang" ), dicUserName.TryGetValue( "Lemon Car" ),

06                                     dicUserName.TryGetValue( "Associated Coffee" ) };

07         }

08  

09         private void LoadCustomers()

10         {

11             AddCustomer( "Spring Yang" );

12             AddCustomer( "Lemon Car" );

13             AddCustomer( "Associated Coffee" );

14         }

15  

16         private void AddCustomer( string name)

17         {

18             dicUserName.Add(name, new Customer(name));

19         }

六、Change Reference to Value(将引用对象改为实值对象)

动机(Motivation)

reference object(引用对象),很小且不可变(immutable),而且不易管理。

示例

01 private Dictionary< string , Customer> dicUserName = new Dictionary< string , Customer>();

02  

03         public void GetCustomers()

04         {

05             string [] UserName = { dicUserName.TryGetValue( "Spring Yang" ), dicUserName.TryGetValue( "Lemon Car" ),

06                                     dicUserName.TryGetValue( "Associated Coffee" ) };

07         }

08  

09         private void LoadCustomers()

10         {

11             AddCustomer( "Spring Yang" );

12             AddCustomer( "Lemon Car" );

13             AddCustomer( "Associated Coffee" );

14         }

15  

16         private void AddCustomer( string name)

17         {

18             dicUserName.Add(name, new Customer(name));

19         }

改为

1 public void GetCustomers()

2 {

3      string [] UserName = { new Customer( "Spring Yang" ), new Customer( "Lemon Car" ), new Customer( "Associated Coffee" ) };

4 }

七、Replace Array with Object(以对象取代数组)

动机(Motivation)

以对象替换数组。对于数组中的每个元素,以一个值域表示。

示例

1 public void Main()

2 {

3      string [] UserInfo = new string [3];

4      UserInfo[0] = "1" ;

5      UserInfo[1] = "spring yang" ;

6      UserInfo[2] = "IT" ;

7 }

改为

view source print ?

1 public void Main()

2 {

3      User user = new User();

4      user.ID = "1" ;

5      user.Name = "spring yang" ;

6      user.Depart = "IT" ;

7 }

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于步步为营 .NET 代码重构学习笔记 八的详细内容...

  阅读:35次