日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間: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ù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元上黨做網(wǎng)站,已為上家服務(wù),為上黨各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

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

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

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

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

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

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

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

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

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

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

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

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

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

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

三、頁面模板

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

1、查詢頁面

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

2、編輯頁面

這個(gè)編輯模板可以解決基本上所有的錄入功能,因?yàn)榘酥鞅恚岸鄠€(gè)從表(1:N或1:1)錄入,而且可以一次性在同一事務(wù)中保存。并且定義了很多觸發(fā)前后事件用于寫一些業(yè)務(wù)處理,并且做到差異更新。

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

四、代碼生成原理

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

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

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ǎn)在于不需要引入第三方類庫,直接調(diào)用mvc視圖的Render方法生成,而且效率很高,缺點(diǎn)是controllerContext及view對(duì)象的構(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)備好了,那么還需要一個(gè)數(shù)據(jù)輸入viewData,我們做用戶界面的目的也就是為了更好的定義這個(gè)viewData。

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

1、查詢頁面生成

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

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

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

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

mms_receive.cs 

Index.cshtml 

ReceiveController.cs 

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

只有l(wèi)ookup控件彈出是空值,因?yàn)橹话芽刂圃O(shè)置為了lookup但沒有為它設(shè)置更詳細(xì)的選項(xiàng)。autocomplete也是同樣 

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

2、編輯頁面生成 

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

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

這里我隨便添加三個(gè)tab頁簽tab1 tab2 tab3 

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

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

tab3也隨便添些東西 

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

點(diǎn)擊生成按鈕,生成后自動(dòng)打開文件夾 

把這些代碼拷貝到項(xiàng)目中直接運(yùn)行 

tab2 

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

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

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

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

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

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

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

點(diǎn)擊生成按鈕,生成后自動(dòng)打開文件夾  

把代碼直接拷貝到項(xiàng)目中運(yùn)行,結(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ù)庫名   
  •              
  •  
  •             
  •  
  •               
  •                  
  •             
  •  
  •         
  •  
  •     
  •  
  •      
  •         
  •  
  •     
  •  
  •  
  •  
  •  
  •