MOON.WEB 另類的MVC架構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>
//--------------------------------------庫文件引用 ----------------------
引用Moon.Orm和Moon.Web庫
//-------------------------------------加入腳本庫到根目錄
//-----------------------頁面效果及代碼生成效果
<script> 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重新建一個項目加進去.