重構 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(除非他們使用超程式設計)。
如果我們有良好的覆蓋率,我們也可以刪除它們並檢視哪些測試失敗
相關文章
- oracle刪除重資料方法Oracle
- VSCode刪除重複的空行VSCode
- 【常用方法推薦】如何刪除MySQL的重複資料?MySql
- 刪除重複id的記錄
- 使用Java Stream API中DistinctBy刪除重複資料JavaAPI
- mysql 刪除重複項MySql
- 刪除oracle重複值Oracle
- JavaScript 刪除重複字元JavaScript字元
- 刪除重複資料
- 陣列的方法-新增刪除陣列
- 使用defineProperty實現自定義setter, 簡化前端Angular的重構工作前端Angular
- mongodb刪除重複資料MongoDB
- 陣列求和,刪除,去重陣列
- JavaScript 刪除字串重複字元JavaScript字串字元
- 刪除_JAVA_OPTIONSJava
- mysql 刪除表中重複的資料MySql
- 刪除排序陣列中的重複項排序陣列
- python列表刪除專案的方法Python
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- JavaScript陣列刪除重複元素JavaScript陣列
- sqlserver中刪除重複資料SQLServer
- JavaScript 刪除陣列重複元素JavaScript陣列
- Remove Duplicate Letters 刪除重複元素REM
- JavaScript刪除字串中重複字元JavaScript字串字元
- windows.old可以刪除嗎?windows.old檔案的刪除方法Windows
- C# 批次刪除Excel中的重複行C#Excel
- ES6刪除字串中重複的元素字串
- 刪除有序陣列中的重複項 II陣列
- Oracle中刪除表中的重複資料Oracle
- 刪除字串中的所有相鄰重複項字串
- json結構體裡邊的刪除JSON結構體
- Win10如何刪除字型_win10刪除字型的兩種方法Win10
- 精選 TOP 面試題 001 | LeetCode 237. 刪除連結串列面試題LeetCode
- Python列表刪除元素的方法有哪些?Python
- 幾種刪除Linux目錄的方法Linux
- 教你把Java Bean擼成串的最快方法-自定義setter生成指令碼JavaBean指令碼
- Java碼農必須掌握的迴圈刪除List元素的正確方法Java
- JavaScript陣列刪除重複內容JavaScript陣列