重構 001 - 刪除Java的Setter方法
Setter方法違反了不變性並新增了意外耦合!
重構步驟:
- 找到 setter 的用法
- 如果您正在設定基本屬性,請將它們移動到建構函式並刪除該方法
- 如果你需要改變一個偶然的屬性,它不是一個 setter。刪除 setXXX 字首
public class Point { protected int x; protected int y; public Point() { this.x = 0; this.y = 0; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } } Point location = new Point(); //At this momment, it is not clear which points represent //It is coupled to constructor decision. //Might be null or some other convention location.setX(1); //Now we have point(1,0) location.setY(2); //Now we have point(1,2) |
重構後的程式碼:
//1. We locate setters usage location.setX(1); location.setY(2); //2. If you are setting essential properties move //them to the constructor and remove the method public class Point { public Point(int x, int y) { this.x = x; this.y = y; //We remove the setters } Point location = new Point(1, 2); |
另外一個案例:
public class Car { protected int speed; public Car() { } public void setSpeed(Speed desiredSpeed) { this.speed = desiredSpeed; } } Car tesla = new Car(); //We have no speed?? tesla.setSpeed(100 km/h); //Now our car runs fast |
重構後的程式碼:
public class Car { protected int speed; public Car() { this.speed = 0 km/h; } public void speed(Speed desiredSpeed) { this.speed = desiredSpeed; } } //1. Locate the setters usage //3. If you need to change an accidental property // it is not a setter. Remove the setXXX prefix Car tesla = new Car(); //Our car is stopped tesla.speed(100 km/h); //We tell the desired speed. We don't set anything //We don't care if the car stores its new speed. //if it manages through the engine //if the road is moving etc |
我們應該用我們的 IDE 檢測 setter(除非他們使用超程式設計)。
如果我們有良好的覆蓋率,我們也可以刪除它們並檢視哪些測試失敗
相關文章
- Java刪除ArrayList中的重複元素的2種方法Java
- oracle刪除重資料方法Oracle
- Java ArrayList刪除特定元素的方法Java
- mysql表刪除重複記錄方法MySql
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- Mongodb 刪除重複資料的幾個方法MongoDB
- MYSQL中刪除重複記錄的方法薦MySql
- oracle 刪除重複資料的幾種方法Oracle
- 刪除重複資料的幾個方法(轉)
- 刪除重複資料的一種高效的方法
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄) 轉Oracle
- 【轉】oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- 重複資料刪除和SSD的互補方法
- 【常用方法推薦】如何刪除MySQL的重複資料?MySql
- SQL Server中刪除重複資料的幾個方法SQLServer
- Swift3.0 -- didSet(OC中重寫setter方法)Swift
- Oracle查詢重複資料與刪除重複記錄方法Oracle
- MySQL刪除表重複記錄的三種方法舉例MySql
- 三種方法刪除列表中重複的元素及效率分析!
- 用SQL語句刪除重複記錄的四種方法SQL
- 刪除重複id的記錄
- 刪除重複資料
- 刪除oracle重複值Oracle
- JavaScript 刪除重複字元JavaScript字元
- mysql 刪除重複項MySql
- 刪除重復資料
- 使用Java Stream API中DistinctBy刪除重複資料JavaAPI
- mysql查詢表裡的重複資料方法和刪除重複資料MySql
- lombok註解為java類生成Getter/Setter方法LombokJava
- 使用defineProperty實現自定義setter, 簡化前端Angular的重構工作前端Angular
- 經典SQL面試題4:高效的刪除重複記錄方法SQL面試題
- VSCode刪除重複的空行VSCode
- JavaScript刪除字串中重複的字元JavaScript字串字元
- 如何刪除ArrayList中的重複元素
- JavaScript 刪除字串重複字元JavaScript字串字元
- mongodb刪除重複資料MongoDB
- 陣列求和,刪除,去重陣列
- MySQL刪除重複資料MySql