IoVC programming model[轉]
IoVC,一種新的編程思想
長久以來,在Web編程中,一直很難克服的一個問題就是:展現層與業務數據糾纏在一起,無法進行良好的解耦, 從而造成應用系統的擴展性差,維護成本高。于是,出現了所謂的MVC框架,試圖以 Model-View-Control 這種非常流行的設計模式,將兩者有效的隔離開來。但回顧目前主流的 Web MVC 架構,它們所做的絕大部分工作無非是:將頁面中控件的值取出打包成 Java Bean;再無非就是在幫助你完成頁面導航的過程中,輔助你進行頁面參數的傳遞與分析。這樣一種“簡單 MVC”架構,是無法完全解決“展現層與業務數據完全解耦”這個問題的。 一旦你的需求超越了框架的能力,那么,你將面對的依然是:不得不在展現層中嵌入大量的 Script 代碼,可能是Java代碼片斷,也可能是大量tag-lib及EL表達式的引入。
IoVC——“Inversion of View-Control”,即“視圖控制反轉”,換言之:它能夠把對“View(即 UI 視圖)的控制力”注入到你的后臺業務邏輯中。這樣一來,你在編寫業務邏輯的過程中,對 View 擁有足夠的控制力,從而能夠將展現層與業務邏輯完全的解耦。
舉一個場景:頁面中有一個文本輸入框,它的值對應后臺的一個JavaBean的屬性。我們首先來看一下傳統的編程模型:
頁面:
<w:textField value="#{myBean.value}"/>
后臺:
public class MyBean {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
此時,假設用戶需要發生變化,我們需要設置文本輸入框的tooltip,并且,它的值來自于后臺 JavaBean 的另一個屬性,那么,程序需要做如下調整:
頁面:
<w:textField value="#{myBean.value}"tooltip="#{myBean.tooltip}"/>
后臺:
public class MyBean {
private String value;
private String tooltip;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getTooltip() {
return tooltip;
}
public void setTooltip(String tooltip) {
this.tooltip = tooltip;
}
}
我們可以觀察:在傳統的編程模型下,如果頁面邏輯發生變化,我們首先需要修改UI展現層,加上 tooltip="#{myBean.tooltip}" 的語句,然后,再在后臺Bean中設置此屬性值。
那么,在IoVC編程模型下,情況又是怎樣的呢?
頁面:
<w:textFieldid="txt"/>
后臺:
public class MyBean {
@Bind(id="txt")
private String value;
}
如果需要擴展文本編輯框的tooltip屬性,只需要:
頁面:
<w:textField id="txt"/>
后臺:
public class MyBean {
@Bind(id="txt")
private String value;
@Bind(id="txt" att="tooltip")
private String tooltip;
}
在IoVC編程模型下,Web頁面不需要發生任何變化,你只需要在后臺 Java Bean 中寫上這樣一行屬性聲明即可@Bind(id="txt" att="tooltip") private String tooltip,甚至于你連傳統的getter/setter都不需要。
換言之,在傳統的編程模型下,頁面美工通過網頁設計工具“畫”出來的頁面,程序員看不懂; 而如果程序員對頁面進行修改,則頁面美工又無法理解; 并且,如果要更改業務邏輯,程序員需要不斷的維護頁面內容,最終造成頁面美工與程序員無法協同工作。而在 IoVC 的編程思想下,頁面美工只需要給每個組件設置一個ID,程序員在后臺的業務邏輯中,便擁有對頁面 UI 元素的完全控制力。Web頁面在美工完成之后,程序員再也無需因為需求的變更或者邏輯的變化,而再重新維護 Web頁面內容。
簡而言之,IoVC是一種更好的MVC,是對MVC的一種高層次抽象。
設想一下:日后美工人員畫出來的頁面(只要設置了正確的ID),程序員可以拿過來直接用,并且, 如果要對頁面做調整(只要不是頁面元素的增加或刪除),程序員可以在自己熟悉的代碼中直接設置,這豈非是一種很享受的境界?
真的不錯啊............這樣會讓設計更靈活..........
posted on 2008-03-05 16:37 gembin 閱讀(414) 評論(0) 編輯 收藏 所屬分類: JSF