自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

另類的ASP.NET快速開發(fā)架構體系

開發(fā) 后端
JVPL和mvc設計模式類似,一個變種的MVC設計模式。下面我們將詳細介紹JVPL模式以及JVPL設計模式的demo實例。

第一部分 另類的MVC架構JVPL架構

 
(JVPL模式的系統(tǒng)結構圖)

1.JVPL模式(JSON+視圖+處理器+加載器)

1)定義:

JVPL和mvc設計模式類似,一個變種的MVC設計模式。

2)MVC的優(yōu)弱點:

MVC讓開發(fā)從原來的 webform中解脫出來,解決了層次清晰邏輯與UI的隔離以及服務端控件的一些瑕疵等諸多問題,但是MVC的弱點同時也存在.在MVC中我們的Model時常變動,我們必須手動創(chuàng)建Model類和Model的變動修改.同時對于 Model的Action控制操作也需要一定程度上的變動.(由實體框架等生成的實體(Model)是無法滿足現(xiàn)行邏輯需求的).

其次因為實際開發(fā)中沒有銀彈,只有平衡點.V,C之間的邏輯緊密,然而實際的前臺實現(xiàn)和效果需求是變化莫測的, 更加導致美工決定VC的局面,從而VC的重用性很低很低.如果一個頁面存在多個視圖,那么其邏輯就相對不易(我們需要維護多個VC組,我們需要處理VC組的一定邏輯次序,構造不同的Model).

3)JVPL設計模式的優(yōu)勢

1)JVPL(json-視圖-處理器--加載器),如上圖所示.如果我要視圖重用我只要載入所需視圖和加載器即可.var 新的視圖=get("加載器","視圖"); 且Moon.net架構會接著腳本引擎幫助我們生成后臺所需代碼.

2)整個JVPL模式建立建立在Ajax的機制上,它具有Ajax所有的優(yōu)缺點.(但我認為Ajax的優(yōu)點>>缺點,且我們可以通過手段解決這些缺點).正如有人說Ajax不安全,因為暴露了系統(tǒng)服務接口,這完全廢話,難道純的form提交就沒有暴露?這些都是門外漢說的話,因為根本的權限機制都沒有建立.接著說,正如前面文章提到的視圖數(shù)據(jù)的加載.如果我前臺的邏輯變動系統(tǒng)的邏輯變動,這是Moon.Web會輔助我們生產(chǎn)新的后臺代碼. 如果一個頁面存在多個視圖,那么這多個視圖的加載,我們通過加載器直接調(diào)度即可.因為腳本引擎的存在,它會幫助我們生成后臺代碼和數(shù)據(jù)分配及數(shù)據(jù)轉發(fā).Moon.NET中最為精華的部分就是腳本引擎.它也是我們提高開發(fā)效率的關鍵.

3)在我們的開發(fā)中,前端展現(xiàn)的標準是由策劃及美工定的,所以作為一個開發(fā)者還是架構師必須緊密結合實際進行架構或開發(fā).這樣才能提高開發(fā)效率. Moon.Web主要對復雜的UI控件諸如:編輯器,分頁,異步文件上傳...等控件進行了封裝且提供了美工可控制接口.因為MVC的控件方法也是一樣的.

2.JVPL設計模式的demo實例

說明:JVPL設計模式與傳統(tǒng)的ASP.NET開發(fā)完全兼容,且符合MVC的設計理念.

實例一:程序配置

-------------------------------------配置文件設置--------------------------------------

  1. <appSettings> 
  2. <add key="DLL" value="Web.dll" />--------------->數(shù)據(jù)處理器和數(shù)據(jù)加載器所在的類庫名(放在Bin里面)  
  3. <add key="dbType" value="PostgreSql" />----------->數(shù)據(jù)庫的類型  
  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庫

 

//-------------------------------------加入腳本庫到根目錄

//-----------------------------------頁面開發(fā)

 

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加載和數(shù)據(jù)更新</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="更新用戶數(shù)據(jù)" /> 
  76.     </form> 
  77.     </body> 
  78. </html> 

兩處黃色部分,表示的數(shù)據(jù)的加載和數(shù)據(jù)提交。

  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的架構設計反應出的一些問題進行了全新的架構設計,彌補了多數(shù)據(jù)源使用不便、同道反應不過ORM、自身架構的瑕疵等問題。

2、介紹

Moon .ORM是一個通用數(shù)據(jù)庫處理框架(可以包含MSSQL POSTGRESQL,SQLITE EXCEL MYSQL DB2 ORACLE...只要你愿意實現(xiàn)接口就可以)。很便捷地進行常用數(shù)據(jù)庫操作(增刪改查)。其性能是幾近純ADO.NET。對于實體的查詢采用emit實現(xiàn),如果您還不滿意可用此框架的代碼生成器直接生成純ADO.NET SQL形式。其主要特色就是性能和便捷的操作。

3、特色

  1. 高性能(該框架采用純的ADO.NET進行框架,避免Linq以及反射帶來的性能損失);
  2. 易用性強(配置簡單,智能感知,代碼生成器的輔助,會sql就可(可以自我性能優(yōu)化)) ;
  3. 多數(shù)據(jù)庫支持(如果需要可自我擴增,熱烈歡迎同道加入團隊開發(fā)中(聯(lián)系qq:564064202));
  4. 強大查詢語法糖功能;
  5. 多數(shù)據(jù)源支持;
  6. .net framework 2.0原生支持。

4、配置簡單

  1. <appSettings>   
  2.  <add key="dbType" value="MSSQL" /> 
  3.  <!--數(shù)據(jù)庫的類型 還可以寫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.             //數(shù)據(jù)添加  
  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("新的數(shù)據(jù)唯一識別標志:"+person.GetOnlyMark());  
  27.               
  28.             //另類數(shù)據(jù)添加  
  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("新的數(shù)據(jù)11唯一識別標志:"+person.GetOnlyMark());  
  36.               
  37.             //數(shù)據(jù)刪除  
  38.             long ret= DBFactory.DeleteWhen(PersonSetTable.IsBeiJing.Equal(1).And(PersonSetTable.Age.BiggerThan(12)));  
  39.             Console.WriteLine("被刪除的條數(shù):"+ret);  
  40.               
  41.             //改數(shù)據(jù)  
  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.     }  

實體代碼生成器

數(shù)據(jù)庫升級問題(我們常常面臨數(shù)據(jù)庫表的變動問題)

Moon.ORM中不必擔心這些東西,因為實體全由代碼生成器生成,更新一次數(shù)據(jù)庫,你重新生成一次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調(diào)用V3版本的Google Maps API
  4. 詳解ASP.NET各種異步操作
  5. ASP.NET通過分布式Session提升性能
責任編輯:林師授 來源: 秦時明月的博客
相關推薦

2009-07-24 10:14:22

ASP.NET開發(fā)

2009-07-30 15:18:11

2009-08-04 10:43:59

ASP.NET控件開發(fā)

2009-08-05 10:36:08

開發(fā)ASP.NET

2024-12-05 08:14:41

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移動開發(fā)

2009-08-10 18:24:29

ASP.NET開發(fā)環(huán)境

2009-07-29 09:38:06

Web開發(fā)ASP.NET

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-03 15:53:11

ASP.NET移動開發(fā)

2009-08-03 13:30:47

ASP.NET開發(fā)

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2025-01-15 00:01:00

開發(fā)應用界面

2009-07-27 10:35:33

TypeConvertASP.NET

2009-07-29 11:19:03

JavaScriptASP.NET

2009-07-29 14:52:12

IScriptContASP.NET
點贊
收藏

51CTO技術棧公眾號