在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,语法简单易学,更重要的是作者一直在维护更新!
毕竟每款引擎都有他们的优缺点,合适的,才是最好的,不是吗?