重構(gòu)CollapsibleSplitter_.Net教程
推薦:Geometry 對(duì)象淺析 ArcEngine Geometry庫(kù)定義了基本幾何圖形的矢量表達(dá)形式,頂級(jí)的幾何圖形有Points、Multipoints、Polylines、Polygons、 Multipatches,Geodatabase和繪圖系統(tǒng)使用這些幾何圖形來(lái)定義其他各
RssBandit項(xiàng)目中的CollapsibleSplitter作為Splitter控件的改進(jìn)版,提供了我夢(mèng)寐以求的功能:可以像Splitter控件一樣分割兩個(gè)相鄰控件,允許在運(yùn)行時(shí)調(diào)整他們的大小,還提供了單擊時(shí)最小化指定控件的功能,并在小小的分隔條上畫(huà)出了相當(dāng)直觀的精細(xì)圖案。
這個(gè)控件有不太令人滿意的地方嗎?嗯,有的。它永遠(yuǎn)只能有8個(gè)像素寬(縱向擺放的時(shí)候),不能將它設(shè)成Splliter默認(rèn)的4個(gè)像素寬,也不能異想天開(kāi)的將它設(shè)成16個(gè)像素寬。
打開(kāi)CollapsibleSplitter的代碼文件——我怎么聞到了一股不太美妙的氣味呢?哦,那邊Martin Fowler同志說(shuō)了:這是代碼的壞氣味,該給它除除臭。
那么我們就來(lái)給它消除異味吧。
先來(lái)看看這個(gè)玩意到底有些什么壞氣味:
用了太多的switch、if語(yǔ)句,把面向?qū)ο蟮膬?yōu)點(diǎn)拋到爪哇國(guó)去了,看看這些代碼吧。這是ToggleSplitter()方法里的代碼,這個(gè)控件中還有很多這樣的代碼:
以下為引用的內(nèi)容: 代碼1 |
下面的是animationTimerTick()方法的代碼(實(shí)際上還被俺去掉了幾個(gè)if...else...嵌套),有這樣代碼的方法還有三四個(gè):
以下為引用的內(nèi)容: 代碼2 |
單個(gè)方法內(nèi)代碼行數(shù)太多,且代碼重復(fù)率高,如同老婆子般絮絮叨叨、啰唆不清。我們來(lái)看看這些長(zhǎng)方法的代碼行數(shù)和重復(fù)率:
ToggleSplitter()方法,89行,其中重復(fù)的語(yǔ)句有
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行,其中重復(fù)的語(yǔ)句有
if(this.Dock == DockStyle.Left || this.Dock == DockStyle.Right),2處
if(expandParentForm && parentForm.WindowState != FormWindowState.Maximized && parentForm != null),8處
OnPaint(PaintEventArgs e)方法,254行,其中重復(fù)的語(yǔ)句有
if(hot),4處
if(this.Enabled),2處
switch語(yǔ)句(對(duì)一個(gè)參數(shù)進(jìn)行判斷),2處
臭味如此明顯,更顯除臭工作之必要,呵呵。那我們就開(kāi)始偉大的除臭工作吧,還有呢,剛才說(shuō)了“它永遠(yuǎn)只能有8個(gè)像素寬”,這個(gè)特性也不太好啊:對(duì)于視力好的人,這個(gè)分割條顯得如此之大;而對(duì)于有點(diǎn)近視的人呢,它又顯得如此之小。如此,我們自然應(yīng)該把這個(gè)8像素限制去掉。
那現(xiàn)在我們的除臭工作目標(biāo)訂好了,如下:
去掉這些討厭的、丑陋的、像懶婆娘裹腳布般一層一層又長(zhǎng)又臭的switch語(yǔ)句和if語(yǔ)句——即使不能完全去掉也應(yīng)該把它們集合在一起,而不是到處分散;
去掉這些千篇一律的、到處一樣的、牽一發(fā)全身不得不動(dòng)的重復(fù)語(yǔ)句;
縮短這些個(gè)超過(guò)一屏的、洋洋灑灑的函數(shù)代碼,把他們拆到多個(gè)方法里面去;
最后,我們希望想這個(gè)玩意大的時(shí)候它就大,想它小的時(shí)候它就小,而不是總是那“8像素”寬(或高)。
分享:再議ASP.NET DataGrid控件中的“添加新行”功能 說(shuō)起在DataGrid中添加新行,ASP.NET開(kāi)發(fā)的大牛人物:Dino Esposito,他的《構(gòu)建WEB解決方案--應(yīng)用ASP.NET和ADO.NET》一書(shū)中提供了和以上兩位類(lèi)似的方法,但是Dino又加了些功能,首先就是&rd
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- Asp.Net 2.0數(shù)據(jù)庫(kù)基本操作方法學(xué)習(xí)
- ASP.NET中的狀態(tài)管理
- ASP.Net中保護(hù)自定義的服務(wù)器控件
- 淺談使用ASP.NET Global.asax 文件
- 簡(jiǎn)述c#中對(duì)字符串進(jìn)行分割的幾種方法
- 淺析ASp.Net自定義驗(yàn)證碼控件
- asp.net將Execl讀到DataSet或DataTable中
- 基于.NET平臺(tái)的分層架構(gòu)實(shí)戰(zhàn)(二)需求分析與數(shù)據(jù)庫(kù)設(shè)計(jì)
- 結(jié)合JavaScript與ASP.NET Web窗體進(jìn)行程序開(kāi)發(fā)
- dropdownlist,datagrid數(shù)據(jù)綁定簡(jiǎn)單實(shí)現(xiàn)
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-重構(gòu)CollapsibleSplitter
。
