Resharper進階六:重構才是王道(上)

來源:互聯網
上載者:User
重構是一種精神,證明你在致力於提供高效的、精鍊的、健壯的代碼,而不是淩亂的、晦澀的、漏洞百出的代碼。
在Visual Studio 2005中,微軟第一次提供了重構工具。但是不夠,遠遠不夠。我們需要的重構是非常廣義的,我們想要對代碼進行快速的調整,快到我在想什麼我的工具就能做什麼。這才是追求重構的境界。所以在這個意義上,幾乎Resharper為你提供了巨大的生產力。

Visual Studio 2005提供的重構包括了如下:

  1. 封裝欄位
  2. 提取方法
  3. 提取介面
  4. 提升局部變數
  5. 移除參數
  6. 重新命名
  7. 重新排列參數

這些方法在Resharper中全部都支援(但Resharper的重構遠不止這些),它們對應的變成了:

  1. 封裝欄位 —— Introduce Field
  2. 提取方法 —— Extract Method
  3. 提取介面 —— Extract Interface (另增加了Extract Superclass提取為基類)
  4. 提升局部變數 —— Introduce Variable
  5. 移除參數 —— 移到Change Signature(改變方法簽名)中
  6. 重新命名 —— Rename (Resharper會根據對象的類型名稱,提供你幾個可選的最合適的名稱)
  7. 重新排列參數 —— 移到Change Signature(改變方法簽名)中

我知道很多人都聲稱自己E文不好,但是,這確實都是很簡單的單詞,難不倒任何人的。這些重構的功能是人所共知的,下面就告訴大家一些Resharper特有的,首先,重構的快速鍵是Ctrl+Shift+R:

1、對於類,除了提取介面、基類,你還可以移動它到其他的命名空間和移動到別的檔案裡,這是一個實用的功能,也許你不信,但是我這真的有個人,把所有的business entity都寫在一個DataObject.cs裡面。你難以想象,我開啟它時嘴張了多大。

2、對於欄位,提供了:

  • Safe Delete,會檢測所有使用到的地方,並詢問如何刪除;
  • Pull Member Up和Push Member Down,可以把這個欄位在基類和繼承類中移動;
  • Use base type where possible,儘可能的使用基類,由於ArcGIS平台是基於com組件的,很多時候我們需要的是IGeometry, IPointCollection這樣的介面所公開的屬性或者方法,於是你沒有必要儲存一個polygon對象,而可以使用基底類型;
  • Encapsulate Field,封裝欄位,但是這個功能遠沒有另一個提供同樣功能的操作有用。我可以在後文中來講。

3、對於方法,提供了:

  • 與欄位類似的功能,此外;
  • Change Signature,更改函數簽名,包括更改名稱,傳回值類型,參數的各種資訊,添加和刪除參數,相當實用。如果你是在重寫方法上操作,會提示你是否到基類中更改。
  • Make Static,如果Resharper檢測到這個方法並沒有與非靜態成員相關聯的話,往往會自動地提示你(以黃色橫杠的形式出現)可以改為static,如果你自作主張的對一些方法進行修改也無不妥,但後果自負。
  • Extract class from parameter,如果你的參數有七個八個,那是否考慮用一個類來封裝這些參數呢,於是這個功能應運而生。
  • Method to Property,顧名思義,如果還在使用GetField()或者SetField(..)的話,你一定是從非.net星來的。

4、在方法體內部:
Extract Method,不用介紹了吧。
Introduce Variable/Parameter/Field,取決於你游標所在的對象,可以提供轉化的功能。
Inline Variable:就是把:IPoint point = new PointClass();
point.PutCoords(_point.X, _point.Y);

變成這樣子:new PointClass().PutCoords(_point.X, _point.Y);  //這是個糟糕的例子

5、重新命名:
為什麼重新命名值得挑出來講,因為Resharper提供了命名建議這一金子般的功能。於是,想改名為易讀性強的名字,不是那麼費腦子的事情了。Resharper會根據這個變數的類型,為你提供幾個備選名字,名字列表是列在游標位置上的(對方法重新命名會彈出對話方塊),你只需要用方向鍵選擇並敲斷行符號即可,這種名字多是將類型的名字首字母改為小寫得來的,甚至刨根到基類的類型名,你還可以在此基礎上加以改進。如果你還在用i,j這種晦澀的名稱,請迅速的把他們改為outIndex, pointCount之類可讀的名稱。
Resharper其實提供了更先進的功能,在你命名一個變數時,就有快速鍵為你提供備選名字,但是Ctrl+Space是我們寶貴的IME切換鍵,於是,我對變數名的敲定,往往是先起了一個較爛的,然後重新命名的。

還有一些更廣義上的,協助你對代碼進行調整的功能,我另寫一篇吧,不然太長了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.