另类的ASP.NET快速开发架构体系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了另类的ASP.NET快速开发架构体系相关的知识,希望对你有一定的参考价值。
参考技术AJVPL和mvc设计模式类似 一个变种的MVC设计模式 下面我们将详细介绍JVPL模式以及JVPL设计模式的demo实例 第一部分 另类的MVC架构JVPL架构
(JVPL模式的系统结构图)
JVPL模式(JSON+视图+处理器+加载器)
)定义:
JVPL和mvc设计模式类似 一个变种的MVC设计模式
)MVC的优弱点:
MVC让开发从原来的 webform中解脱出来 解决了层次清晰逻辑与UI的隔离以及服务端控件的一些瑕疵等诸多问题 但是MVC的弱点同时也存在 在MVC中我们的Model时常变动 我们必须手动创建Model类和Model的变动修改 同时对于 Model的Action控制操作也需要一定程度上的变动 (由实体框架等生成的实体(Model)是无法满足现行逻辑需求的)
其次因为实际开发中没有银弹 只有平衡点 V C之间的逻辑紧密 然而实际的前台实现和效果需求是变化莫测的 更加导致美工决定VC的局面 从而VC的重用性很低很低 如果一个页面存在多个视图 那么其逻辑就相对不易(我们需要维护多个VC组 我们需要处理VC组的一定逻辑次序 构造不同的Model)
)JVPL设计模式的优势
)JVPL(json 视图 处理器 加载器) 如上图所示 如果我要视图重用我只要载入所需视图和加载器即可 var 新的视图=get( 加载器 视图 ); 且架构会接着脚本引擎帮助我们生成后台所需代码
)整个JVPL模式建立建立在Ajax的机制上 它具有Ajax所有的优缺点 (但我认为Ajax的优点>>缺点 且我们可以通过手段解决这些缺点) 正如有人说Ajax不安全 因为暴露了系统服务接口 这完全废话 难道纯的form提交就没有暴露?这些都是门外汉说的话 因为根本的权限机制都没有建立 接着说 正如前面文章提到的视图数据的加载 如果我前台的逻辑变动系统的逻辑变动 这是Moon Web会辅助我们生产新的后台代码 如果一个页面存在多个视图 那么这多个视图的加载 我们通过加载器直接调度即可 因为脚本引擎的存在 它会帮助我们生成后台代码和数据分配及数据转发 Moon NET中最为精华的部分就是脚本引擎 它也是我们提高开发效率的关键
)在我们的开发中 前端展现的标准是由策划及美工定的 所以作为一个开发者还是架构师必须紧密结合实际进行架构或开发 这样才能提高开发效率 Moon Web主要对复杂的UI控件诸如:编辑器 分页 异步文件上传 等控件进行了封装且提供了美工可控制接口 因为MVC的控件方法也是一样的
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=//localhost: /Web /> >程序运行的根目录 </appSettings>
// 库文件引用
引用Moon Orm和Moon Web库
// 加入脚本库到根目录
// 页面开发
结构
- <%@ Page Language= C# AutoEventWireup= true CodeBehind= WebForm aspx cs Inherits= Web WebForm %> <!DOCTYPE PUBLIC //W C//DTD Xhtml Transitional//EN transitional dtd > < xmlns= > <head> <title>model加载和数据更新</title> <meta equiv= content type content= text/; charset=utf /> <script type= text/javascript src= Scripts/jquery min js ></script> <script type= text/javascript src= Scripts/Qin Engine js ></script <script> var pID= ; $(function () Qin_LoadDataToDom ( 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 class= Key field= ID type= hidden /> <table style= width: %; > <tr> <td> 姓名: </td> <td> <input field= UserName type= text /> </td> </tr> <tr> <td> 性别 </td> <td> <input name= Sex field= Sex value= true type= radio />男<input name= Sex field= Sex value= false type= radio />女 </td> </tr> <tr> <td> 年龄 </td> <td> <input field= Age type= text /> </td> </tr> <tr> <td> 北京户口 </td> <td> <input field= IsBeiJing type= checkbox /> </td> </tr> <tr> <td> 年龄段 </td> <td> <select field= AgePeriod ><option value= >老年人</option><option value= >中年人</option><option value= >年轻人</option></select> </td> </tr> </table> <input type= button onclick= AjaxUpdateUserInfo(); value= 更新用户数据 /> </form> </body> </>
两处黄色部分 表示的数据的加载和数据提交
- [Log()]//加载的代码 public static void GetUserInfo() PersonSet data= DBFactory GetEntity<PersonSet>(PersonSetTable ID Equal( )); CustomData cus=new CustomData(); cus A= ; 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架构
背景
针对Qin Data的架构设计反应出的一些问题进行了全新的架构设计 弥补了多数据源使用不便 同道反应不过ORM 自身架构的瑕疵等问题
介绍
Moon ORM是一个通用数据库处理框架(可以包含MSSQL POSTGRESQL SQLITE EXCEL mysql DB ORACLE 只要你愿意实现接口就可以) 很便捷地进行常用数据库操作(增删改查) 其性能是几近纯ADO NET 对于实体的查询采用emit实现 如果您还不满意可用此框架的代码生成器直接生成纯ADO NET SQL形式 其主要特色就是性能和便捷的操作
特色
- 高性能(该框架采用纯的ADO NET进行框架 避免Linq以及反射带来的性能损失) 易用性强(配置简单 智能感知 代码生成器的辅助 会sql就可(可以自我性能优化)) 多数据库支持(如果需要可自我扩增 热烈欢迎同道加入团队开发中(联系qq: )) 强大查询语法糖功能 多数据源支持 < framework 2.0原生支持。tW.winGWit
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);
实体代码生成器
数据库升级问题(我们常常面临数据库表的变动问题)
lishixinzhi/Article/program/net/201311/12132
在ASP.NET Core中使用Apworks快速开发数据服务
不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支持。这个框架的开发和维护我坚持了很久,一直到2015年,我都一直在不停地重构这个项目。目前这个项目在Github上也得到了将近260的推荐数,很多对技术感兴趣的朋友也一直与我保持着联系和交流,甚至还有爱好者自发组成了技术讨论群,专门讨论分享Apworks框架。
然而,随着软件开发技术和.NET的发展,这个框架的设计和研发技术都逐渐过时,重构难度逐渐加大,很多由其本身支持的技术,比如MSMQ、NHibernate也都逐渐淡出人们的视线,相比之下,云计算、微服务、大数据、跨平台等相关技术越来越多地引起了业界的关注,成功的案例也越来越多。如何基于云平台(PaaS + IaaS)快速搭建高效、经济、稳定、安全的软件系统架构,成为了最近两年的热门话题。微软也顺应这样的潮流,做出了很多的改变,就在短短的一到两年时间,引领了.NET的跨平台,开源了诸多著名的项目,比如.NET、Core CLR、Roslyn、ASP.NET、Entity Framework、Powershell等等,并且开始接受并拥抱非Windows的操作系统,比如Visual Studio跨平台、Powershell跨平台、SQL Server跨平台、Visual C++支持多种编译器等等。很明显,原有的Apworks已经不再具备跨平台、云友好、开发迅速的特质,为此,我下定决心重写了Apworks。
全新的Apworks Core应用程序开发框架
演练:使用Apworks Core快速开发数据服务
在开始我们的Apworks Core开发演练之前,请先完成以下准备工作:
安装Visual Studio 2017,确保.NET Core和ASP.NET Core的开发功能已经正确安装
将以及两个package source添加到NuGet的package source中:
准备一个MongoDB的数据库服务器,建议直接下载Windows版本的搭建在本地机器,也可以在Linux下直接运行mongo的Docker容器,省去了安装MongoDB的步骤
如果希望能一起尝试Visual Studio 2017的Docker功能,还需要确保安装最新版本的Windows以及Docker for Windows。当然,完成本文的演练并不需要Docker
开发步骤
首先,新建一个ASP.NET Core的应用程序,名为CustomerService,通过Manage NuGet Packages添加对Apworks.Repositories.MongoDB以及Apworks.Integration.AspNetCore的引用。添加引用的时候注意选择这个package source:
在CustomerService下新建一个Models目录,添加两个类,名称分别为Address和Customer,代码如下:
public
class
Address
以上是关于另类的ASP.NET快速开发架构体系的主要内容,如果未能解决你的问题,请参考以下文章
asp.net三层架构与asp.net MVC各自的区别,各自应该应用在啥场合,在啥情况下用三层,啥情况下用MVC
基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!
[Architect] ABP(现代ASP.NET样板开发框架) 分层架构