iT邦幫忙

DAY 4
7

如何提升系統設計品質 - 技術與工具以.NET為例系列 第 4

[如何提升系統品質-Day4]重構– DRY & Top-Down思考方式(2)

上一篇的[如何提升系統品質-Day3]重構– DRY & Top-Down思考方式(1)文章因為篇幅限制,所以這一篇會將最後的幾個步驟完成,並看到重構後的程式碼。

[如何提升系統品質]系列文章連結
步驟四:
接著來大風吹囉,先將原本屬於business logic的方法,移到Service裡面的AuthenticationService中。將屬於DataAccess的方法,移至DataAccess的AuthenticationDao中。會發現,原本在同一頁的方法,在Service中找不到他的兄弟了。


所以我們要在Service中,加上Dao類別的初始化,換呼叫Dao類別的方法。頁面也要修改成,呼叫AuthenticationService的VerifyPasswordById的方法。


到這邊,該共用的部分,我們都已經移至App_Code相對應的folder裡面。到現在,我們的程式邏輯還是沒變過。我們只有移動了位置,讓各功能模組的職責定位更加清楚。也可以讓團隊開發的時候,可以知道哪一些東西該去哪邊找,進而訂定coding standard。

步驟五:
回到我們新增的需求中,我們到現在還是只有一堆throw new NonImplementationException(),但是我們不用重複開發一樣的程式了。在VerifyPassword的部分,我們只需要呼叫AuthenticationService的VerifyPasswordById的方法即可。當回傳的是Passed時,我們這個方法即回傳true,其他則都當作驗證有誤。這就是基本的DRY原則,我們不重複開發一樣的東西,並不只是為了現在重複開發的成本,而是不遺留技術債給未來的人(那個人很有可能也是自己)。

其他的部分,我們就簡單的補上實作細節的內容:

一樣透過Top-Down的設計方式,再去產生對應的方法外殼即可,這樣做重點不只是省工,而是聚焦。

最後再加上try catch防呆,不讓user看到天書般的錯誤資訊,這是工程師基本的sense。

步驟六:
到步驟五這邊,基本上就大功告成了。但如果頁面有重複的使用到某一個class,而且代表的都是同一個職責,那我會建議再抽象化一層出來,避免重複的程式一再出現,所以我們會將使用到的class與初始化的部分再獨立出來。例如頁面用到兩次AuthenticationService,AuthenticationService用到兩次AuthenticationDao。我們將其封裝成property,避免重複初始化或是一式多份的情況發生。

大功告成!(重構完記得要慶祝一下!) 來看一下我們新的程式長的多乾淨:
原本的程式碼:

這一階段重構完成的結果:

圖太小的話,請見:
1.https://gist.github.com/cff41edd3dbefb0ebc39
2.http://pastie.org/2689089

結論
這篇文雖然有點冗長,但希望帶出來的觀念就是:
1.不要放縱自己,不要貪圖一時便宜,不要輕忽copy/paste帶來的技術債,不要因此讓自己扼殺了成長的機會。
2.抽象思考,不要被技術細節、實作細節所迷惑了,導致寫程式的過程像陷入漩渦的船,迷失了方向。
3.重構與Top-Down的開發方式,其實Visual Studio有很多工具可以用,只是端看各位願不願意嘗試與改變。

希望這一篇文章對大家在開發與維護上,可以有所幫助。


上一篇
[如何提升系統品質-Day3]重構– DRY & Top-Down思考方式(1)
下一篇
[如何提升系統品質-Day5]重構-跨專案使用類別庫
系列文
如何提升系統設計品質 - 技術與工具以.NET為例30

2 則留言

0
就是91
iT邦研究生 4 級 ‧ 2011-10-13 22:23:01

哭
放Code,又超過長度限制...
放圖,又縮到這麼小...

只好放連結了...天啊...真是不太習慣這樣的限制。

0
chiounan
iT邦研究生 1 級 ‧ 2011-10-14 09:54:37

有幫助筆記

我要留言

立即登入留言