天天看點

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

有很多時候,需要我們在代碼中執行很多重複的工作,這時候要涉及到如何使用可複用的方法來解決重複性問題。

比如一個項目管理系統,要求在不同的頁面的不同位置都能調整任務的估算工作量,而且要使用Ajax方法(因為每次調整後都要實時看到總計),應該如何做呢?

0. 顯示目前的值(應該看上去能修改的樣子)

1. 點選目前值,彈出一個小視窗,裡邊是可能的取值(比如0.25, 0.5, 1, 2, 3,5……天),且顯示為連結(是以使用者會去點)

2. 點選其中一個連結(Ajax連結),執行某個Ajax功能

3. 若成功,應該傳回新的數值

4. 如果需要,更新某些計算結果(如調整後的總工時等)

大緻業務界面如下:

右邊綠框中顯示的就是目前值(上下還有很多這種目前值),所有工作完成後,需要重新整理左側帶陰影區域(第一是黃框中的總額;此外由于這個任務還顯示在左邊的區域中,是以第二還要同步更新左邊下面的藍框中的數值)。

<a href="http://blog.51cto.com/attachment/201212/225114437.gif" target="_blank"></a>

0. 把目前值顯示為一個DIV

1. 點選目前值,用jquery toggle出一個另一個平時隐藏的DIV,裡邊放好了所有可能的取值

這些“可能的值”應該是用某種方法讀取來的,否則容易亂;每個值,都是一個Ajax連結

2. 點選其中一個連結(Ajax連結),執行某個Ajax功能,這個功能應該是比如Efforts/AjaxSetEffortPlanned?itemID=XX&amp;effortPlanned=YY之類的

3. 若成功,應該傳回新的數值,是以把1中的每個Ajax連結的UpdateTargetID設為0中的DIV即可

4. 成功回來後重新整理左邊的區域,重新計算和現實(這裡假設已經有了個js函數叫做function refreshLeftPad())

但是,如果有很多頁面都要這個功能,而且以後還有其他的類似功能(調整目前負責人、完成狀态之類的……),那麼代碼就會臃腫重複,怎麼辦呢?封裝。

下面這個原則是我2001年的師傅關宏超說的,後來一直被我們發揚光大,叫做“最小資訊原則”:

最小資訊原則:方法接口應隻傳遞最必須的業務資訊。

包括兩個層面:

1. 技術資料不要傳遞

2. 業務資料不能重複

本文轉自火星人陳勇 51CTO部落格,原文連結:http://blog.51cto.com/cheny/1101539