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重新建一个项目加进去.

     

    posted @ 2012-05-19 12:38  [秦时明月]  阅读(3069)  评论(22编辑  收藏  举报