国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

重構(gòu)CollapsibleSplitter

2024-07-21 02:04:46
字體:
供稿:網(wǎng)友

推薦:Geometry 對(duì)象淺析
  ArcEngine Geometry庫定義了基本幾何圖形的矢量表達(dá)形式,頂級(jí)的幾何圖形有Points、Multipoints、Polylines、Polygons、 Multipatches,Geodatabase和繪圖系統(tǒng)使用這些幾何圖形來定義其他各

  RssBandit項(xiàng)目中的CollapsibleSplitter作為Splitter控件的改進(jìn)版,提供了我夢(mèng)寐以求的功能:可以像Splitter控件一樣分割兩個(gè)相鄰控件,允許在運(yùn)行時(shí)調(diào)整他們的大小,還提供了單擊時(shí)最小化指定控件的功能,并在小小的分隔條上畫出了相當(dāng)直觀的精細(xì)圖案。


  這個(gè)控件有不太令人滿意的地方嗎?嗯,有的。它永遠(yuǎn)只能有8個(gè)像素寬(縱向擺放的時(shí)候),不能將它設(shè)成Splliter默認(rèn)的4個(gè)像素寬,也不能異想天開的將它設(shè)成16個(gè)像素寬。


  打開CollapsibleSplitter的代碼文件——我怎么聞到了一股不太美妙的氣味呢?哦,那邊Martin Fowler同志說了:這是代碼的壞氣味,該給它除除臭。


  那么我們就來給它消除異味吧。


  先來看看這個(gè)玩意到底有些什么壞氣味:


  用了太多的switch、if語句,把面向?qū)ο蟮膬?yōu)點(diǎn)拋到爪哇國去了,看看這些代碼吧。這是ToggleSplitter()方法里的代碼,這個(gè)控件中還有很多這樣的代碼:

 

以下為引用的內(nèi)容:

 

  下面的是animationTimerTick()方法的代碼(實(shí)際上還被俺去掉了幾個(gè)if...else...嵌套),有這樣代碼的方法還有三四個(gè):

 

以下為引用的內(nèi)容:

  單個(gè)方法內(nèi)代碼行數(shù)太多,且代碼重復(fù)率高,如同老婆子般絮絮叨叨、唆不清。我們來看看這些長方法的代碼行數(shù)和重復(fù)率:


ToggleSplitter()方法,89行,其中重復(fù)的語句有
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ù)的語句有
if(this.Dock == DockStyle.Left || this.Dock == DockStyle.Right),2處
if(expandParentForm && parentForm.WindowState != FormWindowState.Maximized && parentForm != null),8處
OnPaint(PaintEventArgs e)方法,254行,其中重復(fù)的語句有
if(hot),4處
if(this.Enabled),2處
switch語句(對(duì)一個(gè)參數(shù)進(jìn)行判斷),2處


  臭味如此明顯,更顯除臭工作之必要,呵呵。那我們就開始偉大的除臭工作吧,還有呢,剛才說了“它永遠(yuǎn)只能有8個(gè)像素寬”,這個(gè)特性也不太好啊:對(duì)于視力好的人,這個(gè)分割條顯得如此之大;而對(duì)于有點(diǎn)近視的人呢,它又顯得如此之小。如此,我們自然應(yīng)該把這個(gè)8像素限制去掉。


  那現(xiàn)在我們的除臭工作目標(biāo)訂好了,如下:


  去掉這些討厭的、丑陋的、像懶婆娘裹腳布般一層一層又長又臭的switch語句和if語句——即使不能完全去掉也應(yīng)該把它們集合在一起,而不是到處分散;


  去掉這些千篇一律的、到處一樣的、牽一發(fā)全身不得不動(dòng)的重復(fù)語句;


  縮短這些個(gè)超過一屏的、洋洋灑灑的函數(shù)代碼,把他們拆到多個(gè)方法里面去;

  最后,我們希望想這個(gè)玩意大的時(shí)候它就大,想它小的時(shí)候它就小,而不是總是那“8像素”寬(或高)。

分享:再議ASP.NET DataGrid控件中的“添加新行”功能
  說起在DataGrid中添加新行,ASP.NET開發(fā)的大牛人物:Dino Esposito,他的《構(gòu)建WEB解決方案--應(yīng)用ASP.NET和ADO.NET》一書中提供了和以上兩位類似的方法,但是Dino又加了些功能,首先就是&rd

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临江市| 会理县| 商水县| 荣成市| 潮州市| 武陟县| 板桥市| 阳西县| 岳西县| 泰来县| 东方市| 永靖县| 内江市| 津市市| 厦门市| 巴林右旗| 峨山| 沽源县| 电白县| 孟村| 江都市| 苗栗市| 兴和县| 临沭县| 莱芜市| 石台县| 黎川县| 弋阳县| 固安县| 广平县| 黄平县| 柞水县| 郸城县| 内丘县| 平顶山市| 景东| 宝兴县| 定西市| 启东市| 绥滨县| 邮箱|