2010-12-09

WinForm 重構

這次因為新的功能需求,需要改寫之前所撰寫的程式功能,
Business Logic幾乎都沒變動,唯一變動的是UI畫面,
以及前端登入時的一些資料驗證功能,但這些小變更卻花了我不少時間重構。
為什麼呢?請聽我慢慢細說。。。

當初在設計這支程式的時候,是有遵循MVC的設計方式,
該是UI該做的顯示畫面,或是Model該處理的Business Logic都是有相當程度的區隔
但是卻沒有相當嚴謹的遵循,導致有些Logic還是放在UI層,
例如:Form Class裡頭竟然還有Business Logic,當我在重新修改功能的同時,
也順便將這些不該存在的東西全部抽離。

UI層就完全是在顯示資料用,他不需要管底層到底做了哪些事情,
而Model則是完全處理關於Business Logic,這樣把權責給區分出來,
這樣重構下來對以後在維護的時候會更加方便。

另外,再提到一個小觀念,其實這是之前就已經知道的事情,
但是卻還是到現在才又開始想起,我先提一段程式碼。如下所示:
image
image 
其中tbxName、tbxage是Textbox控制項,一般在寫WinForm的時候,
我在想大部分的人都應該跟我一樣,都很偷懶直接在Button的事件中寫完所有的事情,
不管是方便性來說,或是以後在維護來講其實都挺方便的(只要看這個Method就好)

但是。。。
今天若又有一個Button要提示未滿18或已滿18,
不知道你是不是也會跟我一樣這樣寫?
image
 
image
image

這樣真的可以Work,但是各位看官,您發現了嗎?
程式裡多了好幾句反覆的程式碼,這樣的寫法很不恰當,
因為萬一又多了一個Button又要做其他功能,是不是又要再寫一次轉換int的程式?
(這裡還不包括是不是會遇到不是int的錯誤)

這裡比較好的作法應該是這樣,設計成屬性
(當然若是只在這個Class中使用請將層級換成private)
這樣的好處是,程式可以重複使用,另外也可以加入驗證機制。
image 

另外寫在Button的程式碼,是不是又更簡單易懂??
image

這麼簡單的東西,我竟然現在才想到,真的是。。。
記錄下來以後可以這樣設計!!





沒有留言:

張貼留言