惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - 网络金领

C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll] DataTable的数据批量写入数据库 C# .NET锁屏程序(顺带屏蔽任务管理器) 步步为营 .NET 代码重构学习 十一 - 网络金领 步步为营 .NET 代码重构学习笔记 十 步步为营 .NET 代码重构学习笔记 九 步步为营 .NET 代码重构学习笔记 八 步步为营 .NET 代码重构学习笔记 六、移动函数和移动值域(Move Method And Move Field) 步步为营 .NET 代码重构学习笔记 五、分解函数和替换算法(Replace Method And Substitute Algorithm) 步步为营 .NET 代码重构学习笔记 四、临时变量(Temporary Variable) 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method) 步步为营 .NET 代码重构学习笔记 三、内联方法(Inline Method) 步步为营 .NET 代码重构学习笔记 一、为何要代码重构 步步为营 .NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式) 步步为营 .NET 设计模式学习笔记 二十三、Interpreter(解释器模式) 步步为营 .NET 设计模式学习笔记 二十二、Memento(备望录模式) 步步为营 .NET 设计模式学习笔记 二十一、Visitor(访问者模式) 步步为营 .NET 设计模式学习笔记 二十、Mediator(中介者模式) 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
步步为营 .NET 代码重构学习笔记 七
网络金领 · 2011-06-02 · via 博客园 - 网络金领

一、Extract Class(提炼类)

动机(Motivation)

一个class应该是一个清楚的抽象(abstract),处理一些明确的责任。但在实际工作中,class会不断成长扩展。这个class会变得过份复杂,很快,class就会变成一团乱麻。

示例

03     private string _name;
04     private string _officeAreaCode;
05     private string _officeNumber;
07     public string Name
09         get { return _name; }
10         set { _name = value; }
13     public string OfficeAreaCode
15         get { return _officeAreaCode; }
16         set { _officeAreaCode = value; }
19     public string OfficeNumber
21         get { return _officeNumber; }
22         set { _officeNumber = value; }
25     public string TelephoneNumber
27         get { return "(" + _officeAreaCode + ")" + _officeNumber; }

改为

03       private string _name;
04       private Telephone _telephoneNumber;
06       public Telephone TelephoneNumber
08           get { return _telephoneNumber; }
09           set { _telephoneNumber = value; }
12       public string Name
14           get { return _name; }
15           set { _name = value; }
18       public string TemphoneNumber
20           get { return _telephoneNumber.TelephoneNumber; }
24   public class Telephone
26       private string _officeAreaCode;
27       private string _officeNumber;
28       public string OfficeAreaCode
30           get { return _officeAreaCode; }
31           set { _officeAreaCode = value; }
34       public string OfficeNumber
36           get { return _officeNumber; }
37           set { _officeNumber = value; }
40       public string TelephoneNumber
42           get { return "(" + _officeAreaCode + ")" + _officeNumber; }

二、Inline Class(将类内联化)

动机(Motivation)

一个class不再承担足够责任、不再有单独存在的理由,将class的所有特性搬移到另一个class中,然后移除原class。

示例

04     private string _name;
08         get { return _ID; }
09         set { _ID = value; }
12     public string Name
14         get { return _name; }
15         set { _name = value; }
23     private string _Age;
27         get { return _ID; }
28         set { _ID = value; }
33         get { return _Age; }
34         set { _Age = value; }

改为

04     private string _name;
05     private string _Age;
09         get { return _ID; }
10         set { _ID = value; }
13     public string Name
15         get { return _name; }
16         set { _name = value; }
21         get { return _Age; }
22         set { _Age = value; }

三、Hide Delegate(隐藏[委托关系])

动机(Motivation)

[封装]即使不是对象的最关键特征,也是最关键特征之一。[封装]意味每个对象都应该尽可能少了解系统的其它部分。如此一来,一旦发生变化,需要了解这变化的对象就会比较少,这会使谈化比较容易进行。

示例

04     private string _name;
05     private Department _depart;
09         get { return _ID; }
10         set { _ID = value; }
13     public string Name
15         get { return _name; }
16         set { _name = value; }
19     public Department Depart
21         get { return _depart; }
22         set { _depart = value; }
27 public class Department
29     private string _departName;
30     private User _manager;
32     public string DepartName
34         get { return _departName; }
35         set { _departName = value; }
38     public User Manager
40         get { return _manager; }
41         set { _manager = value; }

改为

03       private int _ID;
04       private string _name;
05       private Department _depart;
09           get { return _ID; }
10           set { _ID = value; }
13       public string Name
15           get { return _name; }
16           set { _name = value; }
19       public Department Depart
21           get { return _depart; }
22           set { _depart = value; }
25       public string DepartmentManager
27           get { return _depart.Manager; }
31   public class Department
33       private string _departName;
34       private User _manager;
36       public string DepartName
38           get { return _departName; }
39           set { _departName = value; }
42       public User Manager
44           get { return _manager; }
45           set { _manager = value; }

这样取部门管理者就更直接,更方便,适合于少量使用。

但如果有大量的方法都用到了DepartmentManager里,我们就要去掉中间人了。

四、Remove Middle Man(移除中间人)

动机(Motivation)

大量重复的代码是万恶之源。这些重复性代码应该抽出来放进同一个函数中。

示例

04     private string _name;
05     private Department _depart;
09         get { return _ID; }
10         set { _ID = value; }
13     public string Name
15         get { return _name; }
16         set { _name = value; }
19     public Department Depart
21         get { return _depart; }
22         set { _depart = value; }
25     public string DepartmentManager
27         get { return _depart.Manager; }
31 public class Department
33     private string _departName;
34     private User _manager;
36     public string DepartName
38         get { return _departName; }
39         set { _departName = value; }
42     public User Manager
44         get { return _manager; }
45         set { _manager = value; }

改为

04     private string _name;
05     private Department _depart;
09         get { return _ID; }
10         set { _ID = value; }
13     public string Name
15         get { return _name; }
16         set { _name = value; }
19     public Department Depart
21         get { return _depart; }
22         set { _depart = value; }
27 public class Department
29     private string _departName;
30     private User _manager;
32     public string DepartName
34         get { return _departName; }
35         set { _departName = value; }
38     public User Manager
40         get { return _manager; }
41         set { _manager = value; }

在调用时就直接Depart.Manager来取得它的值.