另类的ASP.NET快速开发架构体系

开发 后端
JVPL和mvc设计模式类似,一个变种的MVC设计模式。下面我们将详细介绍JVPL模式以及JVPL设计模式的demo实例。

第一部分 另类的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的设计理念.

实例一:程序配置

-------------------------------------配置文件设置--------------------------------------

  1. <appSettings> 
  2. <add key="DLL" value="Web.dll" />--------------->数据处理器和数据加载器所在的类库名(放在Bin里面)  
  3. <add key="dbType" value="PostgreSql" />----------->数据库的类型  
  4. <add key="linkString" value="Server=localhost;Database=MoonDB;User ID=postgres;Password=mingyue;" />--->连接字符串  
  5. <add key="HTTP_ROOT_PATH" value="http://localhost:8080/Web"/>--->程序运行的根目录  
  6. </appSettings> 

//--------------------------------------库文件引用----------------------


引用Moon.Orm和Moon.Web库

 

//-------------------------------------加入脚本库到根目录

//-----------------------------------页面开发

 

html结构

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Web.WebForm1" %> 
  2.    
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4. <html xmlns="http://www.w3.org/1999/xhtml"> 
  5.     <head> 
  6.         <title>model加载和数据更新</title> 
  7.         <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
  8.          <script type="text/javascript" src="Scripts/jquery-1.6.2.min.js"></script> 
  9.             <script type="text/javascript" src="Scripts/Qin.Engine.js"></script 
  10.          <script> 
  11.               var pID=-1;  
  12.              $(function () {  
  13.                  Qin_LoadDataToDom2("Web.UserInfoAction", "GetUserInfo", {}, "form_UserInfo",function(data){  
  14.                      alert(data.A);  
  15.                      pID=data.A;  
  16.                  });  
  17.                    
  18.              });  
  19.              function AjaxUpdateUserInfo() {  
  20.                  var ID =pID;  
  21.                     _TableName="PersonSet";  
  22.                  Qin_AjaxUpdate("Web.UserInfoAction", "AjaxUpdateUserInfo", "form_UserInfo", "ID", ID, {  }, function (data) {  
  23.                      alert("主键为"+data+" update success");  
  24.                  });  
  25.              }  
  26.          </script> 
  27.     </head> 
  28.     <body> 
  29.           <form id="form_UserInfo"  >   
  30.               <input id="keyID" class="Key" field="ID" type="hidden" />        
  31.                 <table style="width: 100%;"> 
  32.                 <tr> 
  33.                     <td> 
  34.                         姓名:  
  35.                     </td> 
  36.                     <td>   
  37.                         <input field="UserName" type="text" /> 
  38.                     </td> 
  39.                 </tr> 
  40.                 <tr> 
  41.                     <td> 
  42.                         性别  
  43.                     </td> 
  44.                     <td> 
  45.                         <input name="Sex" field="Sex" value="true" type="radio" /><input name="Sex" field="Sex" 
  46.                             value="false" type="radio" />女  
  47.                     </td> 
  48.                 </tr> 
  49.                 <tr> 
  50.                     <td> 
  51.                         年龄  
  52.                     </td> 
  53.                     <td> 
  54.                         <input field="Age" type="text" /> 
  55.                     </td> 
  56.                 </tr> 
  57.                  <tr> 
  58.                     <td> 
  59.                         北京户口  
  60.                     </td> 
  61.                     <td> 
  62.                         <input field="IsBeiJing" type="checkbox"   /> 
  63.                     </td> 
  64.                 </tr> 
  65.                  <tr> 
  66.                     <td> 
  67.                         年龄段  
  68.                     </td> 
  69.                     <td> 
  70.                          <select field="AgePeriod"><option value="1">老年人</option><option value="2">中年人</option><option value="3">年轻人</option></select> 
  71.                     </td> 
  72.                 </tr> 
  73.          
  74.     </table> 
  75.     <input type="button" onclick="AjaxUpdateUserInfo();" value="更新用户数据" /> 
  76.     </form> 
  77.     </body> 
  78. </html> 

两处黄色部分,表示的数据的加载和数据提交。

  1. [Log()]//加载的代码  
  2.         public static void GetUserInfo()  
  3.         {       
  4.             PersonSet data=    DBFactory.GetEntity<PersonSet>(PersonSetTable.ID.Equal(1));  
  5.             CustomData cus=new CustomData();  
  6.             cus.A=1;  
  7.             ReturnJSONString(data,cus);  
  8.         } 

 

  1. [Log()]//更新部分的代码(代码生成器会自动生成)  
  2.         public static void AjaxUpdateUserInfo()  
  3.         {  
  4.             PersonSet data=new PersonSet();  
  5.               
  6.             string UserName=Request["UserName"];  
  7.             string Sex=Request["Sex"];  
  8.             string Age=Request["Age"];  
  9.             string IsBeiJing=Request["IsBeiJing"];  
  10.             string AgePeriod=Request["AgePeriod"];  
  11.             string otherData=Request["otherData"];  
  12.             string PrimaryKey=Request["PrimaryKey"];  
  13.             data.Set(PersonSetTable.UserName,UserName);  
  14.             data.Set(PersonSetTable.Sex,Sex);  
  15.             data.Set(PersonSetTable.Age,Age);  
  16.             data.Set(PersonSetTable.IsBeiJing,IsBeiJing);  
  17.             data.Set(PersonSetTable.AgePeriod,AgePeriod);  
  18.             data.SetOnlyMark(PersonSetTable.ID.Equal(long.Parse(PrimaryKey)));  
  19.             DBFactory.Update(data);  
  20.             ReturnTextString(PrimaryKey);  
  21.         } 

//-----------------------页面效果及代码生成效果

第二部分 高效便捷的ORM架构Moon.net

1、背景

针对Qin.Data的架构设计反应出的一些问题进行了全新的架构设计,弥补了多数据源使用不便、同道反应不过ORM、自身架构的瑕疵等问题。

2、介绍

Moon .ORM是一个通用数据库处理框架(可以包含MSSQL POSTGRESQL,SQLITE EXCEL MYSQL DB2 ORACLE...只要你愿意实现接口就可以)。很便捷地进行常用数据库操作(增删改查)。其性能是几近纯ADO.NET。对于实体的查询采用emit实现,如果您还不满意可用此框架的代码生成器直接生成纯ADO.NET SQL形式。其主要特色就是性能和便捷的操作。

3、特色

  1. 高性能(该框架采用纯的ADO.NET进行框架,避免Linq以及反射带来的性能损失);
  2. 易用性强(配置简单,智能感知,代码生成器的辅助,会sql就可(可以自我性能优化)) ;
  3. 多数据库支持(如果需要可自我扩增,热烈欢迎同道加入团队开发中(联系qq:564064202));
  4. 强大查询语法糖功能;
  5. 多数据源支持;
  6. .net framework 2.0原生支持。

4、配置简单

  1. <appSettings>   
  2.  <add key="dbType" value="MSSQL" /> 
  3.  <!--数据库的类型 还可以写MYSQL,SQLITE,ACCESS等....—>      
  4.  <add key="linkString" value="Server=mainserver;database=HD01SystemDB;Uid=sa;Pwd=123" />    
  5. </appSettings> 

代码功能演示

  1. using System;  
  2. using System.Collections.Generic;  
  3.  
  4. using Moon.Orm;  
  5. using  MoonDB;  
  6.  
  7. namespace r  
  8. {  
  9.       
  10.       
  11.       
  12.     class Program  
  13.     {  
  14.         public static void Main(string[] args)  
  15.         {  
  16.                
  17.             //数据添加  
  18.             PersonSet person=new PersonSet();  
  19.             person.Age=133;  
  20.             person.AgePeriod=1;  
  21.             person.IsBeiJing=true;  
  22.             person.Sex=true;  
  23.             person.UserName="秦仕川";  
  24.               
  25.             DBFactory.Add(person);  
  26.             Console.WriteLine("新的数据唯一识别标志:"+person.GetOnlyMark());  
  27.               
  28.             //另类数据添加  
  29.             person.Set(PersonSetTable.UserName,"另类");  
  30.             person.Set(PersonSetTable.Age,12);  
  31.             person.Set(PersonSetTable.AgePeriod,11);  
  32.             person.Set(PersonSetTable.IsBeiJing,false);  
  33.             person.Set(PersonSetTable.Sex,true);  
  34.             DBFactory.Add(person);  
  35.             Console.WriteLine("新的数据11唯一识别标志:"+person.GetOnlyMark());  
  36.               
  37.             //数据删除  
  38.             long ret= DBFactory.DeleteWhen(PersonSetTable.IsBeiJing.Equal(1).And(PersonSetTable.Age.BiggerThan(12)));  
  39.             Console.WriteLine("被删除的条数:"+ret);  
  40.               
  41.             //改数据  
  42.                
  43.                
  44.             person.UserName="另类修改后";  
  45.             person.SetOnlyMark(PersonSetTable.UserName.Equal("另类"));  
  46.             DBFactory.Update(person);  
  47.               
  48.             //查询  
  49.             PersonSet p=DBFactory.GetEntity<PersonSet>(  
  50.                 PersonSetTable.UserName.Equal("另类修改后"));  
  51.             Console.WriteLine(p.Age);  
  52.               
  53.             //查询一个字段  
  54.             int age=DBFactory.GetOneField<int>(PersonSetTable.Age, PersonSetTable.ID.Equal(5));  
  55.             Console.WriteLine(age);  
  56.              Console.Write("Press any key to continue . . . ");  
  57.             Console.ReadKey(true);  
  58.               
  59.                
  60.               
  61.         }  
  62.     }  

实体代码生成器

数据库升级问题(我们常常面临数据库表的变动问题)

Moon.ORM中不必担心这些东西,因为实体全由代码生成器生成,更新一次数据库,你重新生成一次DLL(代码生成器带有编译功能)

 

原文链接:http://www.cnblogs.com/humble/archive/2012/02/26/2364723.html

【编辑推荐】

  1. 从ASP.NET MVC 2到4看异步控制器
  2. ASP.NET MVC基于异常处理的解决方案
  3. ASP.NET调用V3版本的Google Maps API
  4. 详解ASP.NET各种异步操作
  5. ASP.NET通过分布式Session提升性能
责任编辑:林师授 来源: 秦时明月的博客
相关推荐

2009-07-24 10:14:22

ASP.NET开发

2009-07-30 15:18:11

2009-08-05 10:36:08

开发ASP.NET

2009-08-04 10:43:59

ASP.NET控件开发

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-20 15:57:42

ASP.NET安全架构

2009-08-04 16:33:50

ASP.NET移动开发

2009-08-10 18:24:29

ASP.NET开发环境

2009-07-29 09:38:06

Web开发ASP.NET

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-03 13:30:47

ASP.NET开发

2009-08-03 15:53:11

ASP.NET移动开发

2009-07-29 11:19:03

JavaScriptASP.NET

2009-07-27 10:35:33

TypeConvertASP.NET

2009-07-27 15:48:43

2009-07-29 14:52:12

IScriptContASP.NET

2009-07-29 16:33:28

GreeterLogiASP.NET
点赞
收藏

51CTO技术栈公众号