簡單乾淨的C#方法設計案例:SFCUI.AjaxValue()之二

來源:互聯網
上載者:User

之一,之二,之三

先重溫一下原則:

最小資訊原則:方法介面應只傳遞最必須的商務資訊。

包括兩個層面:

1. 技術資訊不要暴露

2. 商務資訊不能重複

商務資訊分析

先別管技術問題,想一想做這個事情需要哪些資料才能完成?

1. 原來的值是多少(顯示用)

2. 可能的值有哪些(選擇用)

3. 點一個值後,應該執行什麼操作(這個是核心業務)

4. 返回後做什麼(重新整理用)

還有一些問題哪去了?

5. 返回的值重新整理到哪裡?這個調用者不管,他讓我們安排,顯示也是我們顯示(比如一個DIV),重新整理自然就是重新整理我們顯示的那個位置。

6. 如果返回後什麼都不做怎麼辦?看著辦。

最終方法介面設計為:

        public static MvcHtmlString AjaxValue(int id, string value, string[] values, string urlFormat, string ajaxOnSuccess = null)

怎麼多了個ID?因為要顯示很多個這種Ajaxalue, 用ID來區分。
urlFormat是什嗎?他是用來定義產生的Ajax連結的格式的,請看下面的調用(略微存在一些問題的):

    @SFCUI.AjaxValue(story.ID, effortValue.ToString(), Effort.EffortPlannedValues, "/SFC/Efforts/AjaxSetEffortPlanned?itemID=" + story.ID + "&value={0}", ajaxOnSuccess: "refreshLeftPad");

這幾個參數順序說明是:story.ID修改誰的值,effrotValue當前值,...EffortPlannedValues可能的值,"...."AjaxLink的href格式{0}裡邊未來將放著被選擇的value,ajaxOnSuccess是正確返回調用的函數。

介面設計原則的分析

從理論上說,在任何 cshtml中放置這句話,就具備了所有的商務資訊,剩下的全是技術問題,在這個方法裡邊解決,外面一概不管,這就叫做“技術資訊不要暴露”的子原則。
怎麼前面說“略微存在一些問題”呢?因為story.ID在這個裡邊出現了兩遍,第一次是一個整數參數傳遞進去了,第二次是用來產生了urlFormat傳遞進去了,第二次多餘,應該改成:

    @SFCUI.AjaxValue(story.ID, effortValue.ToString(), Effort.EffortPlannedValues, "/SFC/Efforts/AjaxSetEffortPlanned?itemID={0}&value={1}", ajaxOnSuccess: "refreshLeftPad");

這樣裡邊在0放置id,1放置value,就能拼湊出AjaxLink來。

現在,再刪除任何一個字母和標點符號資訊就不夠了,這就叫做“商務資訊不能重複”子原則。

掌握了這個原則,就能在第一時間確認介面的參數(本人喜歡稱之為“外觀”),然後開工編寫。

當然有時候不能第一次就寫出最簡練的介面,那麼可以嘗試先“散裝”一下,是一個函數,還是一堆DIV,先寫出來再說,寫完了,再封裝成最簡形式。

下一篇,會大致說一下AjaxLink裡邊的實現。

聯繫我們

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