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

作者:   出处:互联网   2015-07-08 21:01:44   阅读:2

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的设计理念.


 

实例一:程序配置


 

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


 

 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 / --- 程序运行的根目录   /appSettings  


 

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


 



引用Moon.Orm和Moon.Web库


 

 


 

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


 

 


 

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


 

 


 

html结构


 

 %@ Page Language= C#  AutoEventWireup= true  CodeBehind= WebForm1.aspx.cs  Inherits= Web.WebForm1  %     !DOCTYPE html PUBLIC  -//W3C//DTD XHTML 1.0 Transitional//EN   http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd   html xmlns= http://www.w3.org/1999/xhtml   head   title model加载和数据更新 /title   meta http-equiv= content-type  content= text/html; charset=utf-8  /   script type= text/javascript  src= Scripts/jquery-1.6.2.min.js /script   script type= text/javascript  src= Scripts/Qin.Engine.js /script  script  var pID=-1;  $(function () {  Qin_LoadDataToDom2( Web.UserInfoAction ,  GetUserInfo , {},  form_UserInfo ,function(data){  alert(data.A);  pID=data.A;  });    });  function AjaxUpdateUserInfo() {  var ID =pID;  _TableName= PersonSet ;  Qin_AjaxUpdate( Web.UserInfoAction ,  AjaxUpdateUserInfo ,  form_UserInfo ,  ID , ID, { }, function (data) {  alert( 主键为 +data+  update success  });  }   /script   /head   body   form id= form_UserInfo       input id= keyID   >

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


[Log()]//加载的代码  public static void GetUserInfo()  {   PersonSet data= DBFactory.GetEntity PersonSet (PersonSetTable.ID.Equal(1));  CustomData cus=new CustomData();  cus.A=1;  ReturnJSONString(data,cus);  } 

 


[Log()]//更新部分的代码(代码生成器会自动生成)  public static void AjaxUpdateUserInfo()  {  PersonSet data=new PersonSet();    string UserName=Request[ UserName ];  string Sex=Request[ Sex ];  string Age=Request[ Age ];  string IsBeiJing=Request[ IsBeiJing ];  string AgePeriod=Request[ AgePeriod ];  string otherData=Request[ otherData ];  string PrimaryKey=Request[ PrimaryKey ];  data.Set(PersonSetTable.UserName,UserName);  data.Set(PersonSetTable.Sex,Sex);  data.Set(PersonSetTable.Age,Age);  data.Set(PersonSetTable.IsBeiJing,IsBeiJing);  data.Set(PersonSetTable.AgePeriod,AgePeriod);  data.SetOnlyMark(PersonSetTable.ID.Equal(long.Parse(PrimaryKey)));  DBFactory.Update(data);  ReturnTextString(PrimaryKey);  } 

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


 


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


1、背景


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


2、介绍


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


3、特色


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

4、配置简单


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

代码功能演示


using System;  using System.Collections.Generic;  using Moon.Orm;  using MoonDB;  namespace r  {        class Program  {  public static void Main(string[] args)  {    //数据添加  PersonSet person=new PersonSet();  person.Age=133;  person.AgePeriod=1;  person.IsBeiJing=true;  person.Sex=true;  person.UserName= 秦仕川 ;    DBFactory.Add(person);  Console.WriteLine( 新的数据唯一识别标志: +person.GetOnlyMark());    //另类数据添加  person.Set(PersonSetTable.UserName, 另类 );  person.Set(PersonSetTable.Age,12);  person.Set(PersonSetTable.AgePeriod,11);  person.Set(PersonSetTable.IsBeiJing,false);  person.Set(PersonSetTable.Sex,true);  DBFactory.Add(person);  Console.WriteLine( 新的数据11唯一识别标志: +person.GetOnlyMark());    //数据删除  long ret= DBFactory.DeleteWhen(PersonSetTable.IsBeiJing.Equal(1).And(PersonSetTable.Age.BiggerThan(12)));  Console.WriteLine( 被删除的条数: +ret);    //改数据      person.UserName= 另类修改后 ;  person.SetOnlyMark(PersonSetTable.UserName.Equal( 另类 ));  DBFactory.Update(person);    //查询  PersonSet p=DBFactory.GetEntity PersonSet (  PersonSetTable.UserName.Equal( 另类修改后 ));  Console.WriteLine(p.Age);    //查询一个字段  int age=DBFactory.GetOneField int (PersonSetTable.Age, PersonSetTable.ID.Equal(5));  Console.WriteLine(age);  Console.Write( Press any key to continue . . .  );  Console.ReadKey(true);        }  }  } 

 


实体代码生成器


 


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


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

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat