重構CollapsibleSplitter_.Net教程
推薦:Geometry 對象淺析 ArcEngine Geometry庫定義了基本幾何圖形的矢量表達形式,頂級的幾何圖形有Points、Multipoints、Polylines、Polygons、 Multipatches,Geodatabase和繪圖系統使用這些幾何圖形來定義其他各
RssBandit項目中的CollapsibleSplitter作為Splitter控件的改進版,提供了我夢寐以求的功能:可以像Splitter控件一樣分割兩個相鄰控件,允許在運行時調整他們的大小,還提供了單擊時最小化指定控件的功能,并在小小的分隔條上畫出了相當直觀的精細圖案。
這個控件有不太令人滿意的地方嗎?嗯,有的。它永遠只能有8個像素寬(縱向擺放的時候),不能將它設成Splliter默認的4個像素寬,也不能異想天開的將它設成16個像素寬。
打開CollapsibleSplitter的代碼文件——我怎么聞到了一股不太美妙的氣味呢?哦,那邊Martin Fowler同志說了:這是代碼的壞氣味,該給它除除臭。
那么我們就來給它消除異味吧。
先來看看這個玩意到底有些什么壞氣味:
用了太多的switch、if語句,把面向對象的優點拋到爪哇國去了,看看這些代碼吧。這是ToggleSplitter()方法里的代碼,這個控件中還有很多這樣的代碼:
以下為引用的內容: 代碼1 |
下面的是animationTimerTick()方法的代碼(實際上還被俺去掉了幾個if...else...嵌套),有這樣代碼的方法還有三四個:
以下為引用的內容: 代碼2 |
單個方法內代碼行數太多,且代碼重復率高,如同老婆子般絮絮叨叨、啰唆不清。我們來看看這些長方法的代碼行數和重復率:
ToggleSplitter()方法,89行,其中重復的語句有
if(parentForm != null),3處
if(expandParentForm && parentForm != null),2處
if(this.Dock == DockStyle.Left || this.Dock == DockStyle.Right),4處
if(useAnimations),2處
animationTimerTick(object sender, System.EventArgs e)方法,114行,其中重復的語句有
if(this.Dock == DockStyle.Left || this.Dock == DockStyle.Right),2處
if(expandParentForm && parentForm.WindowState != FormWindowState.Maximized && parentForm != null),8處
OnPaint(PaintEventArgs e)方法,254行,其中重復的語句有
if(hot),4處
if(this.Enabled),2處
switch語句(對一個參數進行判斷),2處
臭味如此明顯,更顯除臭工作之必要,呵呵。那我們就開始偉大的除臭工作吧,還有呢,剛才說了“它永遠只能有8個像素寬”,這個特性也不太好啊:對于視力好的人,這個分割條顯得如此之大;而對于有點近視的人呢,它又顯得如此之小。如此,我們自然應該把這個8像素限制去掉。
那現在我們的除臭工作目標訂好了,如下:
去掉這些討厭的、丑陋的、像懶婆娘裹腳布般一層一層又長又臭的switch語句和if語句——即使不能完全去掉也應該把它們集合在一起,而不是到處分散;
去掉這些千篇一律的、到處一樣的、牽一發全身不得不動的重復語句;
縮短這些個超過一屏的、洋洋灑灑的函數代碼,把他們拆到多個方法里面去;
最后,我們希望想這個玩意大的時候它就大,想它小的時候它就小,而不是總是那“8像素”寬(或高)。
分享:再議ASP.NET DataGrid控件中的“添加新行”功能 說起在DataGrid中添加新行,ASP.NET開發的大牛人物:Dino Esposito,他的《構建WEB解決方案--應用ASP.NET和ADO.NET》一書中提供了和以上兩位類似的方法,但是Dino又加了些功能,首先就是&rd
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-重構CollapsibleSplitter。