zoukankan      html  css  js  c++  java
  • (转)代码生成就用Razor模板

    原文地址:http://www.cnblogs.com/hjblog/archive/2012/11/14/2769660.html

    程序员都自己写过代码生成器吧?说实在的,我没用过商业化的代码生成器,有那学习怎么使用的功夫自己也写出来一个了。代码生成工具用来避免一些重复劳动,还是很爽的。以前写过好几个,实现的都很蹩脚,主要是模板写起来费事又难看。这次选用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模板写一个简单的自用型代码生成器,变成了一件简单有趣的事情。 

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2779764.html
Copyright © 2011-2022 走看看