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

來源:互聯網
上載者:User
方案2 第一步:寫一個新的函數名在原來的代碼下面 第二步:把原來的代碼拷貝到下面兩步下來,
    @this.MergeParameter(    @MFCUI.ImageLink("反白故事板上的狀態", this.MergeParameter("highlight", "OnBoard"), displayAxTextUseCheckIcon: true, displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight")))     if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))    {        @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))    }

第三步:從函數括弧後面開始刪除不想暴露的資訊,能“活下來”的,就是真正的參數。刪除的結果:

@this.MergeParameter("反白故事板上的狀態", "[取消]", "highlight", "OnBoard")

其他的要麼總是一個值,要麼重複了。

問題來了:如果一個參數多數時候是某個值,而其他時候則是另外一個怎麼辦?用預設參數。比如我們的ImageLink居然只有Url而沒有ImageUrl,怎麼知道顯示什麼圖片呢?因為如果url是http://localhost:53979/Agile/StoryBoard/TeamStoryBoard?teamID=103&highlight=OnBoard,而且又沒有指定ImageUrl(是個預設參數),我們會嘗試使用http://localhost:53979/ Resources/Images/Agile/StoryBoard/TeamStoryBoard16.png,這樣如果能把表徵圖全部井井有條地放在目錄裡邊,每個串連都會自動去搜尋自己的表徵圖,除非刻意指定(我們只有10%情況需要指定)。這種做法就可以實現90%情況下的 資訊隱匿
第四步:建立這個函數,並把三行代碼拷貝到裡邊
        public static MvcHtmlString MergeParameter("反白故事板上的狀態", "[取消]", "highlight", "OnBoard")        {            @MFCUI.ImageLink("反白故事板上的狀態", this.MergeParameter("highlight", "OnBoard"), displayAxTextUseCheckIcon : true, displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight")))             if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))            {                @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))            }        }

第五步:動手改造

        public static MvcHtmlString MergeParameter(this WebViewPage page, string title, string titleToCancel, string parameter, string value)        {            var span = new TagBuilder("span");            span.InnerHtml +=                MFCUI.ImageLink(title, page.MergeParameter(parameter, value),                                displayAxTextUseCheckIcon: true,                                displayAsText: !String.IsNullOrEmpty(page.ParameterOf(parameter))).ToString();            if (!String.IsNullOrEmpty(page.ParameterOf(parameter)))            {                span.InnerHtml += MFCUI.Link(titleToCancel, page.MergeParameter(parameter, null));            }            return new MvcHtmlString(span.ToString());        }

第六步:測試注意測試的時候保留原來的代碼,重新開一行:

    @MFCUI.ImageLink("反白故事板上的狀態", this.MergeParameter("highlight", "OnBoard"), displayAxTextUseCheckIcon : true, displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight")))     if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))    {        @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))    }    <br/>    @this.MergeParameter("反白故事板上的狀態", "[取消]", "highlight", "OnBoard")

好處是隨時可以比照代碼看看有什麼問題。

整個1~6步過程花費了10分鐘,測試成功了,不過……我們發現當看到這個介面時,自己一點都不想點擊那個取消,而是想點擊那個Check表徵圖:所以,能不能改成去掉“取消”,直接點擊Check表徵圖?完了,需求變更,全泡湯了。另外:@this.MergeParameter(...)這個函數名字也不倫不類,誰猜得到要產生一個連結需要用this(WebViewPage)的函數呢?所以應該改一下位置。完了,設計重構,全泡湯了。 很可惜,這是開發的常態,就是需求總是在變化,設計總是在重構!關鍵在這時候,我們是想面對一行代碼,還是散裝的幾行代碼?(如果沒有ImageLink,會有更多代碼)何況裡邊還有很多重複的,可能需要改動和不需要改動的地方。
這就是資訊隱匿的目的:盡量把再次調用、需求變更、設計重構的時候,安全、高效地修改最少的地方、最少的文字。
怎樣修改,請看下篇。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.