.NET开发框架:另类的MVC架构和ORM系统

简介:

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

  实例一:程序配置

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

  

  --------------->数据处理器和数据加载器所在的类库名(放在Bin里面)

  ----------->数据库的类型

  --->连接字符串

  --->程序运行的根目录

  

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

 

 

  引用Moon.Orm和Moon.Web库

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

 

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

  html结构

  View Code

<%@ 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" class="Key" field="ID" type="hidden" />      
                <table style="width: 100%;">
                <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="1">老年人</option><option value="2">中年人</option><option value="3">年轻人</option></select>
                    </td>
                </tr>
       
    </table>
    <input type="button" value="更新用户数据" />
    </form>
    </body>
</html>

 

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

 [Log()]//加载的代码

  public static void GetUserInfo()

  {

  PersonSet data= DBFactory.GetEntity(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.特色

  1.高性能(该框架采用纯的ADO.NET进行框架,避免Linq以及反射带来的性能损失);

  2.易用性强(配置简单,智能感知,代码生成器的辅助,会sql就可(可以自我性能优化)) ;

  3.多数据库支持(如果需要可自我扩增,热烈欢迎同道加入团队开发中(联系qq:564064202))

  4.强大查询语法糖功能

  5.多数据源支持

  6..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(

  PersonSetTable.UserName.Equal("另类修改后"));

  Console.WriteLine(p.Age);

  //查询一个字段

  int age=DBFactory.GetOneField(PersonSetTable.Age, PersonSetTable.ID.Equal(5));

  Console.WriteLine(age);

  Console.Write("Press any key to continue . . . ");

  Console.ReadKey(true);

  }

  }

  }


 

 

  实体代码生成器

 

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

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








本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/790683,如需转载请自行联系原作者
目录
相关文章
|
6天前
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
|
10天前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
45 0
|
20天前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
53 0
|
1天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
3天前
|
存储 数据管理 调度
HarmonyOS架构理解:揭开鸿蒙系统的神秘面纱
【10月更文挑战第21天】华为的鸿蒙系统(HarmonyOS)以其独特的分布式架构备受关注。该架构包括分布式软总线、分布式数据管理和分布式任务调度。分布式软总线实现设备间的无缝连接;分布式数据管理支持跨设备数据共享;分布式任务调度则实现跨设备任务协同。这些特性为开发者提供了强大的工具,助力智能设备的未来发展。
17 1
|
13天前
|
存储 监控 负载均衡
|
21天前
|
传感器 存储 架构师
构建基于 IoT 的废物管理系统:软件架构师指南
构建基于 IoT 的废物管理系统:软件架构师指南
57 9
|
20天前
|
JSON 前端开发 Java
Spring Boot框架中的响应与分层解耦架构
在Spring Boot框架中,响应与分层解耦架构是两个核心概念,它们共同促进了应用程序的高效性、可维护性和可扩展性。
41 3
|
16天前
|
存储 消息中间件 前端开发
.NET常见的几种项目架构模式,你知道几种?
.NET常见的几种项目架构模式,你知道几种?
|
16天前
|
SQL 开发框架 关系型数据库
值得推荐的.NET ORM框架
值得推荐的.NET ORM框架