代碼生成就用Razor模板


程序員都自己寫過代碼生成器吧?說實在的,我沒用過商業化的代碼生成器,有那學習怎么使用的功夫自己也寫出來一個了。代碼生成工具用來避免一些重復勞動,還是很爽的。以前寫過好幾個,實現的都很蹩腳,主要是模板寫起來費事又難看。這次選用Razor模板試試,因為Razor模板語法相對於其他模板,更加簡潔,編寫的模板看上去更加美觀。個人認為:使用框架代替不了代碼生成,框架只是粗粒度的提升生產力,而代碼生成可以在小方面提升編碼效率。

模板編寫:

看一下我這里寫的一個代碼生成模板:

< Grid  x:Name ="LayoutRoot"  Background ="White"  Width ="400" >
     < Grid.ColumnDefinitions >
         < ColumnDefinition  Width ="Auto" />
         < ColumnDefinition />
     </ Grid.ColumnDefinitions >
     < Grid.RowDefinitions >

    @foreach (Column col in Model.Columns)
    {
         < RowDefinition  Height ="Auto" />
    }

     </ Grid.RowDefinitions >

    @foreach (Column col in Model.Columns)
    {
        var desp = col.Description ?? col.Name;
         < TextBlock  Text ="@desp"  Margin ="4"  VerticalAlignment ="Center" />
         < TextBox  Text =" {Binding @col.Name} "  Grid.Column ="1"  Margin ="4" />
    }
</ Grid >

這是一個生成前端Xaml代碼的模板,用到了循環foreach、綁定屬性及變量定義語句,但是模板看上去一點都不亂。如果用webform的<%%>語法,將會慘不忍睹。

智能感知:

模板的編寫完全可以做到智能感知的,只要我們在VS里新建一個文本文件,把擴展名改為cshtml,重新打開,@using用到的命名空間,然后把Model定義為強類型就OK了。當然了,寫完以后別忘了刪除定義語句。畢竟模板的編寫大多數是一次性的,生產力的提高也體現在這里。

模板解析:

借助RazorEngine解析模板,異常簡單,項目地址 http://razorengine.codeplex.com/。只需引用2個dll,然后調用如下語句:

string result = Razor.Parse(template, model);

第一個參數是我們上面寫的模板的字符串形式,第二個參數是數據上下文,返回值就是生成的代碼了。

結論:

借助Razor模板寫一個簡單的自用型代碼生成器,變成了一件簡單有趣的事情。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM