簡單乾淨的C#方法設計案例:MFCUI.CheckBoxLink(一)

來源:互聯網
上載者:User

說明:本人不是.net/Html/Ajax/Jquery....高手,所以經常用C#做一些這些技術能做的事情!本文僅用來說明如何簡化設計之用。如果出現具體技術問題,請大家按自己的實際情況理解。

問題

假設想在螢幕上做這樣一個功能(而且有很多這樣的需要):

在當前頁面http://localhost:53979/Agile/StoryBoard/TeamStoryBoard?teamID=103中有一個連結:

連結通往http://localhost:53979/Agile/StoryBoard/TeamStoryBoard?teamID=103&highlight=OnBoard

點一下前往此頁面,而連結外觀變成:

前面的表徵圖、文字發生變化,而後面的[取消]的url變成:http://localhost:53979/Agile/StoryBoard/TeamStoryBoard?teamID=103

這個參數的差異,將產生若干顯示上的變化,具體不說了,估計大家也遇到過這種情況。

一種簡單的做法是用JQuery直接調整顯示,不過我們還有一些特殊的需要,需要重新組織Model,所以現在是用Url實現的。

下面看看如何用一行代碼實現這個功能。

注意實際需求五花八門,我們未來也會換技術方案比如Jquery,這裡僅僅作為例子說明。但無論用什麼技術,這裡仍然是1行代碼,等等說明為什麼可以這麼確定。

方案1先看看最開始的實現,是基於我們現在已經有的一些函數做的,實現如下:
    @MFCUI.ImageLink("反白故事板上的狀態", this.MergeParameter("highlight", "OnBoard"), displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight")) , displayAxTextUseCheckIcon : true)     if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))    {        @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))    }   
MFCUI.ImageLink和Link是我們之前做的通用連結函數,調用中的參數表明文字是“反白……”,連結是this.MergeParameter(...),使用“url中是否有highlight這個參數了"將其切換為普通文字或Url,且使用預設的Check和UnCheck表徵圖。

this是WebViewPage,給它做了2個helper,一個ParameterOf,問某個參數等於幾的;另外一個MergeParameter,設定或消除(取值null)某個參數的。

另:實際上WebViewPage.Request[]能做類似這個,開始我們不知道,自己做了一個。後來發現我們做的那個能處理Ajax返回的頁面(和我們的業務需要有關,涉及到Request.UrlReferrer),所以就沒改回來。用這個[]也是三行代碼。具體裡邊的做法不在本文討論之列,總之這樣就算功能實現了,不過,這算是3行代碼,不是一行。分析怎麼知道自己編碼編多了?三行代碼未必少,十行代碼未必多,但要有個標準。我們現在在用的標準大致如下: 1. 某些代碼常常以一種組合被拷貝來拷貝去比如上面這三行,如果有十個這種切換控制項,就有10×3行,就是多。 2. 在這些代碼中,還有重複的地方,每次拷貝或修改,都要心存謹慎比如上面三行中,"highlight"出現過3次,每次都要寫成一樣的;this.ParameterOf也有兩次 3. 拷來拷去,有些地方其實不用修改,但卻“能修改”(因此危險)比如前面這三行代碼,displayAsTextUseCheckIcon永遠是true,後面那個null也永遠是null。一旦不小心被修改了,不容易看出來,測試的時候也未必每次都有人好心點一下(其實,需要測試才能發現問題,本身就是個問題!)。怎麼辦? 要找最簡資訊集,就是每次調用實際所需的資訊有哪些,哪些是冗餘的。做了這麼多年,我自己也不太能第一次合著眼寫出來一個最簡的介面,發現若先把複雜的寫出來(比如上面的三行)再簡化,就容易得多。下面用方案2來看整個過程(待續)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.