先重溫一下原則:
最小資訊原則:方法接口應隻傳遞最必須的業務資訊。
包括兩個層面:
1. 技術資訊不要暴露
2. 業務資訊不能重複
先别管技術問題,想一想做這個事情需要哪些資料才能完成?
1. 原來的值是多少(顯示用)
2. 可能的值有哪些(選擇用)
3. 點一個值後,應該執行什麼操作(這個是核心業務)
4. 傳回後做什麼(重新整理用)
還有一些問題哪去了?
5. 傳回的值重新整理到哪裡?這個調用者不管,他讓我們安排,顯示也是我們顯示(比如一個DIV),重新整理自然就是重新整理我們顯示的那個位置。
6. 如果傳回後什麼都不做怎麼辦?看着辦。
最終方法接口設計為:
print?public static MvcHtmlString AjaxValue(int id, string value, string[] values, string urlFormat, string ajaxOnSuccess = null)
怎麼多了個ID?因為要顯示很多個這種Ajaxalue, 用ID來區分。
urlFormat是什麼?他是用來定義生成的Ajax連結的格式的,請看下面的調用(略微存在一些問題的):
[email protected](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傳遞進去了,第二次多餘,應該改成:
[email protected](story.ID, effortValue.ToString(), Effort.EffortPlannedValues, "/SFC/Efforts/AjaxSetEffortPlanned?itemID={0}&value={1}", ajaxOnSuccess: "refreshLeftPad");
這樣裡邊在0放置id,1放置value,就能拼湊出AjaxLink來。
現在,再删除任何一個字母和标點符号資訊就不夠了,這就叫做“業務資訊不能重複”子原則。
掌握了這個原則,就能在第一時間确認接口的參數(本人喜歡稱之為“外觀”),然後開工編寫。
當然有時候不能第一次就寫出最簡練的接口,那麼可以嘗試先“散裝”一下,是一個函數,還是一堆DIV,先寫出來再說,寫完了,再封裝成最簡形式。
下一篇,會大緻說一下AjaxLink裡邊的實作。
本文轉自火星人陳勇 51CTO部落格,原文連結:http://blog.51cto.com/cheny/1101536