熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

另類的ASP.NET快速開發架構體系

2013-11-13 09:57:51  來源: .NET編程 


  JVPL和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)是無法滿足現行邏輯需求的)

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

  )JVPL設計模式的優勢

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

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

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

  JVPL設計模式的demo實例

  說明:JVPL設計模式與傳統的ASPNET開發完全兼容且符合MVC的設計理念

  實例一:程序配置

  配置文件設置


  


    <appSettings> 
    <add key=DLL value=Webdll />>數據處理器和數據加載器所在的類庫名(放在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> 

  //庫文件引用

  
引用MoonOrm和MoonWeb庫

  //加入腳本庫到根目錄

  

  //頁面開發

  html結構


  


    <%@ Page Language=C# AutoEventWireup=true CodeBehind=WebFormaspxcs Inherits=WebWebForm %> 
       
    <!DOCTYPE html PUBLIC //WC//DTD XHTML  Transitional//EN transitionaldtd
    <html xmlns=
        <head> 
            <title>model加載和數據更新</title> 
            <meta httpequiv=contenttype content=text/html; charset=utf /> 
             <script type=text/javascript src=Scripts/jqueryminjs></script> 
                <script type=text/javascript src=Scripts/QinEnginejs></script 
             <script> 
                  var pID=;  
                 $(function () {  
                     Qin_LoadDataToDom(WebUserInfoAction GetUserInfo {} form_UserInfofunction(data){  
                         alert(dataA);  
                         pID=dataA;  
                     });  
                       
                 });  
                 function AjaxUpdateUserInfo() {  
                     var ID =pID;  
                        _TableName=PersonSet;  
                     Qin_AjaxUpdate(WebUserInfoAction 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> 
    </html> 

  兩處黃色部分表示的數據的加載和數據提交


  


    [Log()]//加載的代碼  
            public static void GetUserInfo()  
            {       
                PersonSet data=    DBFactoryGetEntity<PersonSet>(PersonSetTableIDEqual());  
                CustomData cus=new CustomData();  
                cusA=;  
                ReturnJSONString(datacus);  
            } 



    [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];  
                dataSet(PersonSetTableUserNameUserName);  
                dataSet(PersonSetTableSexSex);  
                dataSet(PersonSetTableAgeAge);  
                dataSet(PersonSetTableIsBeiJingIsBeiJing);  
                dataSet(PersonSetTableAgePeriodAgePeriod);  
                dataSetOnlyMark(PersonSetTableIDEqual(longParse(PrimaryKey)));  
                DBFactoryUpdate(data);  
                ReturnTextString(PrimaryKey);  
            } 

  //頁面效果及代碼生成效果

  

  第二部分 高效便捷的ORM架構

  背景

  針對QinData的架構設計反應出的一些問題進行了全新的架構設計彌補了多數據源使用不便同道反應不過ORM自身架構的瑕疵等問題

  介紹

  Moon ORM是一個通用數據庫處理框架(可以包含MSSQL POSTGRESQLSQLITE EXCEL MYSQL DB ORACLE只要你願意實現接口就可以)很便捷地進行常用數據庫操作(增刪改查)其性能是幾近純ADONET對於實體的查詢采用emit實現如果您還不滿意可用此框架的代碼生成器直接生成純ADONET SQL形式其主要特色就是性能和便捷的操作

  特色


    高性能(該框架采用純的ADONET進行框架避免Linq以及反射帶來的性能損失)
    易用性強(配置簡單智能感知代碼生成器的輔助會sql就可(可以自我性能優化))
    多數據庫支持(如果需要可自我擴增熱烈歡迎同道加入團隊開發中(聯系qq:))
    強大查詢語法糖功能
    多數據源支持 < framework 2.0原生支持。tW.winGWit.COm

  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(代碼生成器帶有編譯功能)


From:http://tw.wingwit.com/Article/program/net/201311/12132.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.