
(JVPL模式的系統結構圖)
1.JVPL模式(JSON+視圖+處理器+加載器)
1)定義:
JVPL和mvc設計模式類似,一個變種的MVC設計模式.
2)MVC的優弱點:
MVC讓開發從原來的 webform中解脫出來,解決了層次清晰邏輯與UI的隔離以及服務端控件的一些瑕疵等諸多問題,但是MVC的弱點同時也存在.在MVC中我們的 Model時常變動,我們必須手動創建Model類和Model的變動修改.同時對於 Model的Action控制操作也需要一定程度上的變動.(由實體框架等生成的實體(Model)是無法滿足現行邏輯需求的).
其次因為實際開發中沒有銀彈,只有平衡點.V,C之間的邏輯緊密,然而實際的前台實現和效果需求是變化莫測的, 更加導致美工決定VC的局面,從而VC的重用性很低很低.如果一個頁面存在多個視圖,那么其邏輯就相對不易(我們需要維護多個VC組,我們需要處理VC組的一定邏輯次序,構造不同的Model).
3)JVPL設計模式的優勢
1)JVPL(json-視圖-處理器--加載器),如上圖所示.如果我要視圖重用我只要載入所需視圖和加載器即可.var 新的視圖=get("加載器","視圖"); 且Moon.net架構會接着腳本引擎幫助我們生成后台所需代碼.
2)整個JVPL模式建立建立在Ajax的機制上,它具有Ajax所有的優缺點.(但我認為Ajax的優點>>缺點,且我們可以通過手段解決這些缺點).正如有人說Ajax不安全,因為暴露了系統服務接口,這完全廢話,難道純的form提交就沒有暴露?這些都是門外漢說的話,因為根本的權限機制都沒有建立.接着說,正如前面文章提到的視圖數據的加載.如果我前台的邏輯變動系統的邏輯變動,這是Moon.Web會輔助我們生產新的后台代碼. 如果一個頁面存在多個視圖,那么這多個視圖的加載,我們通過加載器直接調度即可.因為腳本引擎的存在,它會幫助我們生成后台代碼和數據分配及數據轉發.Moon.NET中最為精華的部分就是腳本引擎.它也是我們提高開發效率的關鍵.
3)在我們的開發中,前端展現的標准是由策划及美工定的,所以作為一個開發者還是架構師必須緊密結合實際進行架構或開發.這樣才能提高開發效率. Moon.Web主要對復雜的UI控件諸如:編輯器,分頁,異步文件上傳...等控件進行了封裝且提供了美工可控制接口.因為MVC的控件方法也是一樣的.
2.JVPL設計模式的demo實例
說明:JVPL設計模式與傳統的ASP.NET開發完全兼容,且符合MVC的設計理念.
實例一:程序配置
-------------------------------------配置文件設置 -------------------------------------
<add key="DLL" value="Web.dll" /> --------------->數據處理器和數據加載器所在的類庫名(放在Bin里面)
<add key="dbType" value="PostgreSql" /> ----------->數據庫的類型
<add key="linkString" value="Server=localhost;Database=MoonDB;User ID=postgres;Password=mingyue;" /> <add key="HTTP_ROOT_PATH" value="http://localhost:8080/Web"/>---& amp;gt;程序運行的根目錄
</appSettings>
//--------------------------------------庫文件引用 ----------------------

//-------------------------------------加入腳本庫到根目錄

//-----------------------頁面效果及代碼生成效果
var pID=-1;
$( function () {
// ----------------------------------數據綁定和加載 --------------------------
// -----1.從指定地方加載數據到指定的dom中
Qin_LoadDataToDomWithFunction("EmailHelper.EmailActions", "GetUserInfo","form_UserInfo", {}, function(data){
alert(data.A);
pID=data.A;
});
// ------2.更新用戶數據綁定的方法
$("#btnUpdate").click( function(){
AjaxUpdateUserInfo();
// 更新某dom中的數據
function AjaxUpdateUserInfo() {
var ID =pID;
_TableName="PersonSet";
Qin_AjaxUpdate("EmailHelper.EmailActions", "AjaxUpdateUserInfo", "ID", ID,"form_UserInfo", { }, function (data) {
alert(" 主鍵為"+data+" update success");
});
};
});
// ------3.發送數據並返回JSON
$("#btnSend").click( function(){
Send();
// 更新某dom中的數據
function Send() {
var value=$("#sendData").val();
var name="秦仕川";
Qin_PostJSON("EmailHelper.EmailActions", "SendReturnJSON", {value:value ,name:name }, function (data) {
alert(data.Name+":"+data.Value);
});
};
});
// ------4.發送數據並返回Text
$("#btnSend2").click( function(){
Send2();
// 更新某dom中的數據
function Send2() {
var value=$("#sendData2").val();
var name="秦仕川";
Qin_PostText("EmailHelper.EmailActions", "SendReturnText", {value:value ,name:name }, function (data) {
alert(data);
});
};
});
// ------------------------------------------------
});
</script>
完整DEMO及文檔:/Files/humble/EmailHelper.zip
建議使用MonoDevelop,下載地址
如果不想下載,自己用VS重新建一個項目加進去.