MOON.WEB 另類的MVC架構JVPL架構1.0發布 第一篇 客戶端篇 提供文檔和下載 (不留言,謝絕入內)


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

 

 
 

 

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

    實例一:程序配置

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

    <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重新建一個項目加進去.

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM