MOON.WEB 另類的MVC架構JVPL架構

openkk 12年前發布 | 23K 次閱讀 MVC .NET開發

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的設計理念.

實例一:程序配置

-------------------------------------配置文件設置 -------------------------------------

<appSettings>
        <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>

 

Title

Qin_LoadDataToDom(className,functionName,domID,data);

功能:從指定方法中加載數據到指定的Dom元素中.

className:方法所在類全名(包括命名空間)

functionName:調用的方法名

domID:用來放置加載回來數據的dom

data:傳送給方法的json數據

Qin_LoadDataToDomWithFunction(className,functionName,domID,data,customerFunction)

功能:從指定方法中加載數據到指定的Dom元素中,并附帶用戶可操作回調函數

className:方法所在類全名(包括命名空間)

functionName:調用的方法名

domID:用來放置加載回來數據的dom

data:傳送給方法的json數據

customerFunction:格式為function(data),data回傳給用戶的

Qin_PostTextWithDom(className, functionName, data, domID,backFuction) 

功能:發送數據data和domID中的數據到指定方法中

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

domID:用來放置加載回來數據的dom

data:傳送給方法的json數據

backFuction:回傳方法格式如 function(data){}< /p>

例子:

Qin_PostJSON(className, functionName, data, callback)

功能:發送數據data到指定方法中,返回json格式數據到callback回調函數中

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

domID:用來放置加載回來數據的dom

data:傳送給方法的json數據

callback:回傳方法格式如 function(data){}

例子

Qin_PostText(className, functionName, data, callback)

功能:發送數據data到指定方法中,返回text格式數據到callback回調函數中

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

domID:用來放置加載回來數據的dom

data:傳送給方法的json數據

callback:回傳方法格式如 function(data){}

例子:

Qin_AjaxInsert(className, functionName, data, domID, backFuction)

功能:插入數據data和domID中的數據到指定方法中(Moon.ORM配合),返回text格式數據到callback回調函數中,并且系統會在會生成后臺代碼,直接復制到后臺指定方法中即可.

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

domID:用來放置加載回來數據的dom

data:傳送給方法的json數據

callback:回傳方法格式如 function(data){}

Qin_AjaxDelete(className, functionName, PrimaryKey, PrimaryKeyValue, backFuction)

功能:通過主鍵及主鍵值刪除指定數據記錄.

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

PrimaryKey:記錄主鍵名

PrimaryKeyValue:記錄主鍵值

backFuction:回傳方法格式如 function(data){}< /p>

Qin_AjaxDeleteWithData(className, functionName, PrimaryKey, PrimaryKeyValue, data, backFuction)

功能:通過主鍵及主鍵值刪除指定數據記錄.(同時發送打他數據到指定方法)

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

PrimaryKey:記錄主鍵名

PrimaryKeyValue:記錄主鍵值

backFuction:回傳方法格式如 function(data){}< /p>

Qin_AjaxUpdate(className, functionName,PrimaryKey, PrimaryKeyValue, domID,  data, backFuction) 

功能:通過主鍵及主鍵值及data數據和dom中的數據更新指定數據記錄

className:方法所在類全名(包括命名空間)

functionName:調用的方法名

domID:更新的字段所在的dom

Data:發送的額外數據

PrimaryKey:記錄主鍵名

PrimaryKeyValue:記錄主鍵值

backFuction:回傳方法格式如 function(data){}< /p>

QinJSONP(className, functionName, data, callback)

注意:后臺方法與ReturnJSONP配合使用

功能:調用跨域的方法.

className:方法所在類的全名(包括命名空間)

functionName:調用的方法名

Data:發送的額外數據

backFuction:回傳方法格式如 function(data){}< /p>

LoadPageAndThenSetData(pageFullLocation,data,loaderDataClassName,loaderDataFunctionName,data2,toDomID)

功能:從指定的頁面pageFullLocation(url)加載頁面內容到toDomID中,同時從 (loaderDataClassName,loaderDataFunctionName)加載數據到toDomID 中

loaderDataClassName:加載數據的方法所在類的全名(包括命名空間)

loaderDataFunctionName:加載數據的方法

pageFullLocation:加載的頁面地址

Data:加載頁面地址是發送給頁面的數據

data2:加載數據方法時發送的數據

toDomID:用來數據渲染的dom

Data:發送的額外數據

backFuction:回傳方法格式如 function(data){}< /p>

l

 

  完整DEMO及文檔:/Files/humble/EmailHelper.zip

 建議使用MonoDevelop,下載地址

 

 如果不想下載,自己用VS重新建一個項目加進去.

項目主頁:http://www.baiduhome.net/lib/view/home/1337424164339

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!