日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
5分鐘快速開發(fā)之代碼生成器asp.netmvc4

一、前言

創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元上黨做網(wǎng)站,已為上家服務(wù),為上黨各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

作為一個碼農(nóng)這么多年,一直在想怎么提高我們的編碼效率,關(guān)于如何提高編碼效率,我自己的幾點體會

1、清晰的項目結(jié)構(gòu),要編寫代碼的地方集中

2、實現(xiàn)相同功能的代碼量少并且清晰易懂

3、重復(fù)或有規(guī)律的代碼應(yīng)該自動生成

在這里我就討論下代碼生成的問題。

二、關(guān)于代碼生成器

剛畢業(yè)時我也非常迷信代碼生成器,喜歡在網(wǎng)上找一些代碼生成器及相關(guān)的源碼,喜歡在和網(wǎng)友討論哪款生成器***用,但實際上很少真正用這些東西來開發(fā)項目,原因很簡單:

1、生成出來的代碼不是我們要的代碼

2、生成后的代碼再修修改改,其實還沒有我的ctrl+c和ctrl+v速度快。

3、生成的基本上是實體類及sql拼接代碼,現(xiàn)在直接用linq或一些好用的orm多方便,誰還用SQLHelper加sql文拼接?

4、b/s項目中沒有一個生成器能很好的能生成UI層代碼及前端交互的js代碼,即使能生成也是簡單的頁面。

所以,我勸大家不要迷信代碼生成器了。它的確可以提高我們的效率,但是并不是網(wǎng)上你找一個生成器就行的。代碼生成器它只是一個模板引擎而已,最重要的不是代碼生成器本身,而是對一類功能或一類頁面的代碼規(guī)范,對自己代碼的提煉,提煉出一個通用的模板。

比如我們常見的查詢頁面,錄入頁面等,我們只要提煉一個標(biāo)準(zhǔn)的查詢頁面的代碼,包括前臺html,前臺js,后臺控制器,后臺數(shù)據(jù)服務(wù)。然后把它寫成模板,再利用模板引擎就可以生成我們需要的代碼了。

代碼生成器本身就是模板引擎,所以我覺得***的代碼生成器不是網(wǎng)上流傳的那些可以生成三層架構(gòu)代碼的軟件,而是微軟的razor引擎,非常簡潔易懂,而且做過asp.net mvc項目的朋友應(yīng)該也很熟悉。我個人覺得這是用來做代碼生成***的引擎。

三、頁面模板

我們還是會想要快速開發(fā),比如我選擇了一些設(shè)定之后,就可以直接生成我想要的代碼包括html及js,拷貝到項目中就可以直接運行,運行后就看到我想要的頁面,基本功能都有。當(dāng)然這里所說的快速開發(fā)是建立在我對頁面功能的提煉模板之上的。實際上我提煉了三種模板:

1、查詢頁面

這個模板可以解決大部分的查詢報表業(yè)務(wù)功能

2、編輯頁面

這個編輯模板可以解決基本上所有的錄入功能,因為包括了主表,及多個從表(1:N或1:1)錄入,而且可以一次性在同一事務(wù)中保存。并且定義了很多觸發(fā)前后事件用于寫一些業(yè)務(wù)處理,并且做到差異更新。

3、查詢編輯頁面,可以查詢也可以直接在grid中編輯,這個頁面用于做一些簡單單據(jù)或一些基礎(chǔ)數(shù)據(jù)頁面。

四、代碼生成原理

把以上頁面代碼做成razor模板,razor模板 + 設(shè)定選項 ==razor引擎==> 頁面代碼

怎么利用razor引擎,其實有以下幾種方法:

1、直接利用mvc的view輸出功能,以下為關(guān)鍵代碼

 
 
  1. var stringWriter = new StringWriter();  
  2. var viewContext = new ViewContext(controllerContext, view, viewData, TempData, stringWriter);  
  3. view.Render(viewContext, stringWriter);  
  4. var result = stringWriter.ToString(); 

用這種方法的優(yōu)點在于不需要引入第三方類庫,直接調(diào)用mvc視圖的Render方法生成,而且效率很高,缺點是controllerContext及view對象的構(gòu)建獲取非常復(fù)雜。這種方法適用于有潔辟的碼農(nóng)們,我屬于這一種。

2、利用第三方類庫RazorEngine輸出,以下為關(guān)鍵代碼

 
 
  1. var template = "Hello @Model.Name! Welcome to Razor!";  
  2. var viewData = new { Name = "World" });  
  3. var result = Razor.Parse(template, viewData); 

這代碼很清爽,一目了然,只不過要引入RazorEngine類庫,而且效率不如前者。

五、代碼生成用戶界面

我們模板準(zhǔn)備好了,引擎準(zhǔn)備好了,那么還需要一個數(shù)據(jù)輸入viewData,我們做用戶界面的目的也就是為了更好的定義這個viewData。

這個用戶界面我們還是要把三種頁面的定義分開:

1、查詢頁面生成

***步,選擇代碼類別search(查詢頁面),選擇數(shù)據(jù)庫,選擇業(yè)務(wù)主表,再勾選字段即可實現(xiàn)查詢條件部的設(shè)置,并且實現(xiàn)了拖拉排序功能。大家可以對照查詢模板看。

第二步,選擇grid中要顯示的列,并且設(shè)置屬性,格式化等 

第三步,設(shè)置一些全局設(shè)定,主要根據(jù)這些參數(shù)確定命名空間,生成文件名等信息 

點擊生成按鈕,按設(shè)定生成代碼,生成后彈出文件夾,已分別生成MVC三層代碼 

mms_receive.cs 

Index.cshtml 

ReceiveController.cs 

把這個代碼直接拷貝到項目中直接運行,測試條件過濾都沒有問題,grid會自適應(yīng)高度,grid遠(yuǎn)程排序,選擇分頁翻頁都沒有問題,所有的功能都可用, 

只有l(wèi)ookup控件彈出是空值,因為只把控制設(shè)置為了lookup但沒有為它設(shè)置更詳細(xì)的選項。autocomplete也是同樣 

即代碼生成器已經(jīng)生成了一個大的結(jié)構(gòu)及UI,一些小細(xì)節(jié)還是要手動修改下,代碼生成的UI界面如果把每個控件的選項也做進(jìn)去會相當(dāng)?shù)膹?fù)雜,也沒有必要再細(xì)化了。 

2、編輯頁面生成 

***步,選擇主表編輯區(qū)的字段及控件類型,控件類型中的高級還未實現(xiàn),這個編輯的UI也可以參照編輯的模板看 

第二步,添加tab頁簽,選擇頁簽類型(grid,form,empty) grid是指跟主表N:1關(guān)系,form是指跟主表1:1關(guān)系,empty是空頁簽,生成后自己可以添加內(nèi)容 

這里我隨便添加三個tab頁簽tab1 tab2 tab3 

tab1用來放人員變動grid(跟主表關(guān)系N:1)

tab2就選擇form(跟主表關(guān)系1:1,也可以是主表本身)

tab3也隨便添些東西 

第三步,其它設(shè)置 

點擊生成按鈕,生成后自動打開文件夾 

把這些代碼拷貝到項目中直接運行 

tab2 

tab3,修改主表數(shù)據(jù),tab1,tab2,tab3點保存,能保存成功, 

審核按鈕也可用,審核后單據(jù)不可修改 

這個編輯功能基本上可以囊括很多的錄入頁面了,可以算是比較通用了

3、查詢編輯頁面(查詢編輯在同一個頁面內(nèi))頁面生成

***步,選擇查詢條件并設(shè)置控件類型

第二步,設(shè)置grid中的數(shù)據(jù)列,及編輯器 

第三步,其它設(shè)置 

點擊生成按鈕,生成后自動打開文件夾  

把代碼直接拷貝到項目中運行,結(jié)果如下,經(jīng)測試除了控件還需要進(jìn)一步設(shè)置,所有按鈕功能正常使用 

#p#

六、代碼生成頁面的源碼

Index.cshtml

 
 
  1. @{  
  2.     ViewBag.Title = "代碼生成";  
  3.     Layout = "~/Views/Shared/_Layout.cshtml";  
  4. }  
  5.  
  6. @section head{  
  7.      
  8.      
  9.         div#navigation{float: left;width: 180px;}  
  10.         div#wrapper{float: right;width: 100%;margin-left: -185px;}  
  11.         div#wizard{margin-left: 185px;}  
  12.         ul.anchor{margin:0 0 10px 0 !important;}  
  13.         ul li{margin-left:-16px;}  
  14.         .grid .z-txt{margin:0 -3px;width:90%;}   
  15.         .grid input{width:90%;}  
  16.         .grid input[type=checkbox]{cursor:default;}  
  17.         .grid select{width:80%;padding:0 !important;height:22px;}  
  18.         .grid select + a{margin:5px;}  
  19.         .tDnD_whileDrag{background-color: #FBEC88 !important;}  
  20.      
  21. }  
  22.  
  23. @section scripts{  
  24.      
  25.      
  26.     @Scripts.Render("~/Resource/Sys/Generator.js")  
  27.      
  28. }  
  29.  
  30.  
  31.      
  32.          
  33.             代碼類別   
  34.              
  35.             
 
  •             數(shù)據(jù)庫名   
  •              
  •  
  •             
  •  
  •               
  •                  
  •             
  •  
  •         
  •  
  •     
  •  
  •      
  •         
  •  
  •     
  •  
  •  
  •  
  •  
  •