2015年7月5日 星期日

Visual Studio 擴充功能 - Implementator

我在開發專案的時候一定會用到很多的介面,可以從我的一些系列文章裡可以看到,對於系統的抽象化是否能夠瞭解、掌握與充分使用,對於大型、複雜系統的分解與後續的測試都會有相當大的幫助,如果你對於系統抽象化的分析與解構都能夠相當上手,很多看似複雜、難以處理的問題都可以迎刃而解。

話雖這麼說,還是很多人對於物件導向的抽象化還是相當模糊,更別說將抽象化的概念去轉化到實際的專案開發裡頭,所以一個很直接的點就可以看出系統的結構是否良好以及後續的維護,甚至於是否具有可測試性都可以看出,就是看專案裡頭有沒有使用到「介面 Interface」,我知道這一段說法相當武斷與偏頗,不過就我目前所接觸到的情況都能夠看出端倪與跡象。

很多人對於介面,因為不瞭解以及不知道如何應用在實務上,所以就乾脆選擇不用。而另外一種狀況則是當專案使用了介面之後,在進入偵測模式或是在 Design-Time 時,當想要去看某個繼承於介面的方法時,按下 F12 後就會直接移到介面的定義裡,而不是繼承實作類別裡,然後為了要找真正的實作方法就要找很久 …… 不要認為有人因為這個理由就不使用介面,我還真的有碰到一個團隊因為這樣而禁止在專案開發時使用介面,夠瞎吧,我只能說世界之大、無奇不有,其實這肇因於對於 Visual Studio 的不熟悉以及個人觀念的不好而犧牲了讓系統邁向良好架構的機會。

 


如果在一個沒有安裝套件的 Visual Studio 2013 裡要去看一個繼承實作介面某方法的實作內容時,應該怎麼做呢?直接按下 F12 是會直接移到介面的方法定義上,

image

image

沒有安裝套件的情況下,可以使用「呼叫階層 Ctrrl + K, Ctrl + T」的方式去將 Get 的使用階層給全部顯示出來,如下:

image

image

不過不要以為這樣就可以解決問題,上面的例子看起來可以解決在實作介面方法按下 F12 看定義時會跑到介面的方法定義的問題,但是假如中間多了一層抽象類別的話就會破功啦,上面圖片裡的案例就是這樣,上面所看到的「實作 “Get”」下所顯示的就是抽象類別的方法,並不是真正實作的方法。

 

在一些需要付費購買的 Visual Studio 套件裡,都會有 Go To Implementation 的功能,例如我有安裝的「ReSharper」與「JustCode」都有,而且都是我經常會使用到的,下圖就是使用 ReSharper 使用 Go to Implementation 的情境,

image

當繼承的介面有很多實作類別的時候,這時候就會跳出視窗,將所有實作介面的類別給顯示出來,

image

https://www.jetbrains.com/resharper/features/navigation_search.html#Go_to_Implementation

我自己的電腦是裝 ReSharper,而公司的電腦配備不是很好,如果裝了 ReSharper 後,我怕會跑不動,所以就另外安裝使用 Telerik JustCode,JustCode 的功能與 ReSharper 類似,都是輔助程式開發的工具套件,不過 JustCode 因為執行的功能雖然與 ReSharper 差不多,但還是有少了一些東西,例如 ReSharper 在開發 ASP.NET MVC 時就有特別針對 Controller 與 View 多了些功能,JustCode 就沒有,不過 JustCode 一樣也是有提供 Go To Implementation 的功能,

image

http://www.telerik.com/products/justcode/code-navigation-and-search.aspx

 

ReSharper 或 Telerik JustCode 都有提供 Go To Implementation,除了這個功能之後,兩個工具都可以輔助我們開發程式,讓我們寫程式時可以更加順暢而且更有效率,不過很實際的就是好用的工具當然都不是佛心的,售價也並不便宜,所以能買得下去然後改善開發效率的人應該是很少的(不過大家可以安裝使用 30 天來試試看,絕對會讓你在試用期滿之後刷下去,我會建議有預算而且有能力負擔的人是可以買下去,有投資必定有所收穫)。

 image

image

 

Implementator - Visual Studio Extensions

如果沒有預算或是實在無法花這一筆錢(不是一次買下去就可以,因為往後每年還是要花錢再買授權)難道就沒有其他更好的解決方式嗎?當然還有是解決方法的,剛好前不久就有看到一個支援 Visual Studio 2013 的新套件(是的,只有支援 VS2013),這套件雖然陽春就只有做「Go To Implementation」這件事情,但是能夠解決問題就是值得一試的好套件。

image

https://visualstudiogallery.msdn.microsoft.com/39eddcfe-7204-409e-b0ea-11f01d73b4d8

當只有類別繼承實作介面的時候,對著使用方法執行 Implementator 快速鍵就會移動到實作類別的方法,如果是一個介面有許多繼承實作的類別時,就會出現視窗然後顯示各個實作類別,然後看我們要移動到哪一個類別裡,

image

 

先安裝套件,

image

在程式裡,一樣在方法上按下滑鼠右鍵,可以看見選單多了「Go To Implementation」的選項,然後預設的快速鍵是「Ctrl + F12」(如果有與你目前所使用的快速鍵衝突,可以另外自己設定),

image

出現一個浮動視窗並顯示有繼承實作介面的各個類別,移動到你想去的類別然後按下 Enter 就可以了,

image

image

 

如果是從介面的方法定義也可以反向去尋找繼承實作類別,

image

 

補充:

其實不安裝任何套件,而且也不用「呼叫階層」的功能時,其實可以使用「尋找所有參考」的功能,我想這應該是很基本的功能,快速鍵「Shift + F12

image

image

 

2015-07-22 更新

隨著 Visual Studio 2015 在 2015-07-20 的發佈,VS2015 上面有另外一位作者發表了「Go To Implementation」這個 Extensions,大家不妨使用看看。

https://visualstudiogallery.msdn.microsoft.com/0ed93222-83cd-4db3-92bc-a78909047156

image

 


功能雖然就只有一個,但卻是個相當實用的功能,當你沒有預算購買 ReSharper 或 JustCode 或是其他的擴充套件(ex: CodeRush)時,可以先安裝使用 Implementator,而且作者也應該會繼續開發下去,也希望作者可以在之後的更新版本可以增加一些功能。

 

Visual Studio Gallery - Implementator 擴充功能

 

以上

1 則留言:

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。