重構CollapsibleSplitter_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

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

        RssBandit項目中的CollapsibleSplitter作為Splitter控件的改進版,提供了我夢寐以求的功能:可以像Splitter控件一樣分割兩個相鄰控件,允許在運行時調整他們的大小,還提供了單擊時最小化指定控件的功能,并在小小的分隔條上畫出了相當直觀的精細圖案。


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


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


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


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


        用了太多的switch、if語句,把面向對象的優點拋到爪哇國去了,看看這些代碼吧。這是ToggleSplitter()方法里的代碼,這個控件中還有很多這樣的代碼:

      以下為引用的內容:

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

      以下為引用的內容:

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


      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

      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程