为什么我们要使用asp.net模板引擎

翅膀的初衷

发表于2014-04-21 21:56:06

在PHP,JSP甚至javascript中,模板引擎是使用频率蛮高的,但是在asp.net中,模板引擎的使用频率相对来说比较低,同时,asp.net模板引擎也很少!

首先,在讲为什么我们要使用asp.net模板引擎之前,我们先问问,为什么我们要使用模板引擎:

一.从前端语言javascript(非Node.js)的角度来讲,模板引擎最大的好处就是方便,我们先来看一段这样的代码:

var html='<ul>';
for(var i=0;i<list.length;i++){
  html+='<li><a href="news.aspx?id='+list[i].id+'">'+list[i].title+'</a>';
}
html+='</ul>';

document.getElementById('box').innerHTML=html;

如果没有模板引擎,我们要将很多数据HTML文本写到js中,并且使JS可阅读性及可维护性降低,假如使用JS模板引擎,代码可以改成这样子:

<ul>
    <% for ( var i = 0; i < list.length; i++ ) { %>
         <li><a href="news.aspx?id=<% list[i].id%>"><% list[i].title%></a></li>
    <% } %>
</ul>

这样其它人员一看就明白,可维护性就大大提高了!


二.从PHP,Asp.net 等后端语言来讲,也有以下好处:

1.干净地分离显示逻辑和程序代码,以Asp.net为例,如果显示一个列表:我们一般这么写:

<ul>
<asp:Repeater ID="rptList" runat="server">
    <ItemTemplate>
        <li><a href='news.aspx?id=<%#eval("id")%>'><%#eval("title")%></a></li>
    </ItemTemplate>
</asp:Repeater>
</ul>

然后还要在后台写如下代码:

rptList.DataSource = SellerDA.GetTopHotSellers(9);
rptList.DataBind();

而使用模板引擎,我们可以使用如下的代码:

<ul>
$set(list=SellerDA.GetTopHotSellers(9))
$forearch(node in list)
 <li><a href="news.aspx?id=$node.id">$node.title</a></li>
$end
</ul>

这样前后端代码完整分离!

2.程序员和设计师的快速开发/部署/维护
如第一点的展示,如果使用模板引擎,因为前端与后端的代码与逻辑已经分离了,我们在开发时,可以完全不用理会前端,更加专注后端业务的实现以实现快速开发。同时部署与维护的成本也在降低。

3.语法简单易懂
比起.net知识来说,模板引擎的语法更加简单易学,以JNTemplate为例,有一定JS语法或者其它语言语法基础的前端,可以轻松在10分钟内了解并使用它

4.灵活的自定义开发

5.安全隔离于后端代码


即然模板引擎有么多好处,为什么在Asp.net中使用率却不高呢?原因如下:

1.具体需求不同,比如一些定制性很高的网站,没必要使用模板引擎。比如我想给自己做一个网站,我没有其它要求,只要它能呈现数据就行,这样的网站,说实话直接大量控件一拖,开发会更简便!

2.开发环境不同,asp.net特别是webform因为封装得很好,很多入门级开发者,甚至做了一二年的asp.net开发者连基本的JS语法都不太懂,一味的习惯拖控件,他们认为前端是与他们无关的事情,只要数据呈现出来了,根本不会考虑之外的其它东西!

3.asp.net中可供使用的模板引擎比较少,比较常用的有 nVelocity,JNTempate,VTemplate……等,哪怕是使用人数最多的nVelocity,现在也处理半停止维护状态!

4.使用asp.net本身的技术替代了模板引擎,因为第3点的原因,现在很多基于asp.net的blog与CMS,直接使用用户控件来替代模板引擎,据我所知,国内某知名商城,则是自己简单封装了webform来替代模板引擎。

好消息是,在asp.net4.0中,我们可以使用微软官方的模板引擎Razor来做开发,以解决之前的以上问题,当然,你也可以继续使用第三方模板引擎,比如JNTempate,语法简单易学,更重要的是作者一直在维护更新!

毕竟每款引擎都有他们的优缺点,合适的,才是最好的,不是吗?