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

推荐订阅源

D
DataBreaches.Net
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
D
Docker
J
Java Code Geeks
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
腾讯CDC
罗磊的独立博客
U
Unit 42
爱范儿
爱范儿
Vercel News
Vercel News
MyScale Blog
MyScale Blog

博客园 - 网络金领

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 博客园 - 网络金领

一、Duplicate Observed Data(复制[被监视数据])

动机(Motivation)

将该笔数据拷贝到一个domain object中。建立一个Observer模式,用以对domain object 和GUI object内的重复数据进行同步控制(sync)。

示例

步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)

二、Change Unidirectional Association to Bidirectional(将单向关联改为双向)

动机(Motivation)

添加一个反指针,并使修改函数(modifiers)能够同时更新两条连接。

示例

03     private Customer _customer;
05     public Customer NewCustomer
07         get { return _customer; }
08         set { _customer = value; }

改为

03      public List<Customer> CustomerList = new List<Customer>();
05      public void AddCustomer(Customer arg)
07          arg.orderlist.Add(this);
08          CustomerList.Add(arg);
11      public void RemoveCustomer(Customer arg)
13          arg.orderlist.Remove(this);
14          CustomerList.Remove(arg);
18  public class Customer
20      public List<Order> orderlist = new List<Order>();
21      public void AddOrder(Order arg)
23          arg.CustomerList.Add(this);
24          orderlist.Add(arg);
26      public void RemoveOrder(Order arg)
28          arg.CustomerList.Remove(this);
29          orderlist.Remove(arg);

三、Change Bidirectional Association to Unidirectional(将双向改为单向)

动机(Motivation)

两个classes之间有双向关联,但其中一个class如今不再需要另一个class的特性。

示例

03         public List<Customer> CustomerList = new List<Customer>();
05         public void AddCustomer(Customer arg)
07             arg.orderlist.Add(this);
08             CustomerList.Add(arg);
11         public void RemoveCustomer(Customer arg)
13             arg.orderlist.Remove(this);
14             CustomerList.Remove(arg);
18     public class Customer
20         public List<Order> orderlist = new List<Order>();
21         public void AddOrder(Order arg)
23             arg.CustomerList.Add(this);
24             orderlist.Add(arg);
26         public void RemoveOrder(Order arg)
28             arg.CustomerList.Remove(this);
29             orderlist.Remove(arg);

改为

03     private Customer _customer;
05     public Customer NewCustomer
07         get { return _customer; }
08         set { _customer = value; }

四、Replace Magic Number with Symbolic Constant(以符号常量/字面常量取侙魔法数)

动机(Motivation)

创造一个常量,根据其意义为它命名,并将上述的字面数值替换为这个常量。

示例

1 public double PotentialEnergy(double mass, double height)
3     return mass * 9.51 * height;

改为

1 private double GRAVITATIONAL_CONSTANT = 9.51;
2 public double PotentialEnergy(double mass, double height)
4     return mass * GRAVITATIONAL_CONSTANT * height;

五、Encapsulate Field(封装值域)

动机(Motivation)

将它声明为private,并提供相应的访问函数(accessors)

示例

改为

5     get { return _name; }
6     set { _name = value; }

六、Replace Type Code with Class(以类取代型别码)

动机(Motivation)

以一个新的class替换该数值型别码(type code)

示例

03     public  int O = 0;
04     public  int A = 1;
05     public  int B = 2;
06     public  int AB = 3;
08     private int _bloodGroup;
10     public Person(int bloodGroup)
12         _bloodGroup = bloodGroup;
14     public int NewBloodGroup
16         get { return _bloodGroup; }
17         set { _bloodGroup = value; }

改为

03        public int O = BloodGroup.O.Code;
04        public int A = BloodGroup.A.Code;
05        public int B = BloodGroup.B.Code;
06        public int AB = BloodGroup.AB.Code;
09        private int _bloodGroup;
11        public Person(int bloodGroup)
13            _bloodGroup = bloodGroup;
16        public int NewBloodGroup
18            get { return _bloodGroup; }
19            set { _bloodGroup = value; }
23    public class BloodGroup
25        public static BloodGroup O = new BloodGroup(0);
26        public static BloodGroup A = new BloodGroup(1);
27        public static BloodGroup B = new BloodGroup(2);
28        public static BloodGroup AB = new BloodGroup(3);
30        private int _code;
32        private BloodGroup(int code)
34            _code = code;
37        public int Code
39            get { return _code; }
40            set { _code = value; }