Rider Refactoring 之 Change Signature
			 針對 Method 的 Signature 加以重構			
		
 
		
	
	
		Contents
		
    
	
	Rider 相當於 IntelliJ + Resharper,除了保有 IntelliJ 平台的特色外,還包含 Resharper 強悍的功能,本文將討論其 Refactoring 中的 Change Signature。
Version
macOS High Sierra 10.13.3
Rider 2018.1
Change Signature
實務上常在通過單元測試後,在重構階段才發現 method 的 parameter 需要重構,此時就該使用 Change Signature。
- 重構 method 名稱:Method、Property、Indexer
- 重構 method 回傳型別:Method、Property
- 重構 parameter 名稱與型別:Method、Constructor、Indexer
- 新增或刪除 parameter:Method、Constructor、Indexer
- 重構 parameter 順序:Method、Constructor、Indexer
重構 Signature 並修改 Client
Calculator.cs
| 1 | namespace ClassLibrary | 
Program.cs
| 1 | using System; | 
欲將 Calculator.Add() 加以 Change Signature。

- 將游標放到 Add()
- 按熱鍵:⌃ + T,選擇 Change Signature

- 將 method 名稱重構成 Add3
- 增加 parameter int x
- 對原本呼叫的 function 選擇直接 Modify(稍後會介紹Delegate via overloading method)
- 按 Next下一步

對於新增的 parameter,Rider 提供 4 種重構方式
- Leave code non-compatible, I'll correct calls my selft:也就是 Rider 不做任何修改
- Use 0:Rider 會對新的參數傳入- 0
- Resolve with call tree:Rider 會對每個呼叫的 method 停下來,讓我們決定該如何修改 (稍後會介紹)
- Use the following value:統一給定指定值傳入
在此選擇 Use 0 。

- Rider 替我們將 method 名稱改成 Add3()
- Rider 替我們增加了 parameter int z

- Client 也改成 Add3
- Argument 多傳了 0
重構 Signature 但不修改 Client

- 選擇 Delegate via overloading method,將以 Overloading 方式重構

對於 client,一樣有 4 種重構方式。

- 原本的 Add()重構成Add3(),也增加了 parameterint z
- 另外新增一個 Add()呼叫Add3(),如此可在不修改 Client 的情況下,改變 signature
如 class library 已經正式發佈,有其他的 client 使用中,這種重構方式可使的 client 不用修改程式碼,也能達到 Change Signature 的目的
直接修改 Client 的 Argument

- 直接在 client 新增 argument 2
- 按熱鍵 ⌥ + ↩,顯示了多種重構方式,甚至可以新增 Overloading Method

- Rider 幫我們增加了新 parameter int i
根據 Call Tree 逐步修改 Client
Calculator.cs
| 1 | namespace ClassLibrary | 
新增 Multiply() 與 Calculate() 。
Program.cs
| 1 | using System; | 
Client 改呼叫 Calculate()。

一樣針對 Add() 加以重構。

一樣重構 method name 與增加 parameter。

- 選擇 Resolve with call tree

- Rider 會逐一根據 call tree 一步一步重構,首先遇到呼叫 Add3()之處,會詢問你該如何重構,內建提供多種方法,選擇Create field _z in type Calculator

- Rider 自動幫我們加上 field 與 Constructor

既然 Calculator 新增了 constructor,接下來就是針對 constructor 加以重構。
- 針對 constructor 也提供了眾多重構方式,選擇 User edit

- 自行在 constructor 輸入 4
Conclusion
- Rider 針對 Change Signature 提供多種重構方式,甚至還可以根據 call tree,一步一步提供客製化的重構
Sample Code
完整的範例可以在我的 GitHub 上找到