`

再论模板引擎-超越模板引擎

阅读更多
说了半天看来还是没说明白,估计是长时间不写博语言组织能力退化了。其实要说的很简单,用了那么多模板引擎(为了赶项目自己还写过一个)结果到头来我发现自己在做一件很蠢的事情。让模板引擎支持判断,循环,分支,不同的强化出各种不同的标签,标签越来越像asp.net的控件标签,API越来越复杂。也许最后一回头发现我们实现了一个asp.net老早就已经存在的东西。那为什么我们不现在直接就拿来用了?
以下我将分几个部分来说明我的观点,再次重申,我不是说不用模板引擎,我的观点是aspx文件本身就是最好的模板引擎了,至于如何用,我后面会给出一个我自己用的一种方式,当然你也可以总结出你自己的:
一、模板引擎的软肋
很多做PHP的同学对模板引擎很熟悉,比如Smarty,说出这个主要是显得我还是懂点不是啥也没听说过的愣头青。模板引擎的优点当然不需要我多说,如果没优点那根本就没有存在的价值。首先第一个要面临的问题就是学习的成本。老实说,就现在的模板引擎的语法而言,而什么越来越向编程语言靠拢也就是为了降低学习的成本。下面是一段Smarty的模板代码:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->{* Monte Ohrt March 4, 2002 *}
{* $cols is the number of columns you want *}
<TABLE border=1>
    
<TR>
    {section name=numloop loop=$data}
        
<TD>{$data[numloop]}</TD>
        {* see if we should go to the next row *}
        {if not ($smarty.section.numloop.rownum mod $cols)}
                {if not $smarty.section.numloop.last}
                        
</TR><TR>
                {/if}
        {/if}
        {if $smarty.section.numloop.last}
                {* pad the cells not yet created *}
                {math equation = "n - a % n" n=$cols a=$data|@count assign="cells"}
                {if $cells ne $cols}
                {section name=pad loop=$cells}
                        
<TD>&nbsp;</TD>
                {/section}
                {/if}
                
</TR>
        {/if}
    {/section}
</TABLE>

当然如果习惯了的同学会觉得也没啥啊,不过对于完全没接触的人来说,或者没空去学习的人(比如说我)来说,这段代码不仔细研究就跟天书一样。对于美工而言,更加是天书一般的存在,怪不得国内一个Smarty教程网站的站长说:赶紧来学吧,这玩意儿难学,工资高。对于IT来说越难学的工资越高,仿佛为了钱确实要跟自己过不去。换个其他的模板引擎也差不多,我就不一一列举代码了。除了模板本身的“模板语言”需要学习外,还有模板引擎本身的API需要学习。那么对于程序员和美工来说这都是双重负担。

其二就是编译支持和工具支持,Smarty还算不错,Dreamweaver里头有个插件,不过对于被智能感知菜单和编译期检测惯坏的.NETer 和Javaer来说还是显得太稚嫩了(没有智能感知菜单就请你杀了我吧)。看着文档写代码,然后run一下看看结果貌似是上个世纪的工作方式。或许有一天各类开源爱好者可以搞出各类插件来解决这个问题,不过谁有这个时间等待,谁有这个时间去一一试用那个插件好呢?

二、模板引擎使用的误区
现在大多数模板引擎所干的事情就是把数据和模板合拢一堆生成结果html(xml或者其他什么的暂时不考虑)。那么其中一个使用的误区就来了,把模板引擎误认为是换肤引擎,比如最典型的想法是:
#1楼  iiduce@163.com  2008-07-08 10:09  小狼壮壮      
使用aspx做模板,怎么实现同一cs代码,多套模板共存,达到迅速更换模板的目的呢。
-------------------------------------------------------------------------------华丽的分割线--------------------------------------------------

模板引擎最常用的地方就是CMS系统了,CMS系统一般都会生成静态页面来提高效率。还有一个就是很多MVC框架会使用到模板引擎来实现View,不过如果如果页面很复杂,涉及大量的对象赋值以及循环和控制的话,可能会因为大量的反射而导致效率的瓶颈(关于这点没测试过,有兴趣的可以测测)。关于这两点基本都是直接生成最终结果。换肤等功能性的东西个人觉得不应该作为模板引擎的主要设计目的。

三、使用ASPX页面作为模板引擎的可行性和优势所在
可行性就不说了,当然是可行的,而且现在ASP.NET MVC已经在使用aspx页面做View层了,下面来说优势
  • 学习效率
         对编程人员来说根本就不用学了,本来就会的,学习效率当然最高。
  • 工具支持和编译时检测
         Dreamweaver和VS.NET都支持,而且智能感知菜单,编译时检测都存在。这点Very Nice
  • 支持ASP.NET控件
         这点有同学说控件不方便,那么其实不用控件,在页面上直接
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><%
if(Helper.IsLogin()){
User u
=Helper.GetLoginedUser();
%>
你的姓名是:
<%=u.Name%>
<%}%>

        是不是还是一样的,何必非要把自己套死呢?

有人说是不是要在XX层引入System.Web,其实这个问题就有点搞笑了,MVC和分层完全是两码事了。就算是按分层的理论来说在逻辑层引入System.Web也不是什么问题,如果要用StringTemlate做模板引擎,那么肯定也要引入StringTemplate的Dll,那么用aspx页面做模板引擎的话引入System.Web不是也在情理之中么?


最后来说说我是怎么用的

调用模板还是通过Server.Execute,主要是为了解决调用文件的问题,我没有用load ascx文件的方式,而是定义了一个占位符,执行了这个页面后搜索一下有几个占位符,然后根据占位符去调用其他的模板,最后把执行后的结果替换过来。


分享到:
评论

相关推荐

    企业网站HTML源码-超越IT科技公司响应式网页模板-可适配移动端.zip

    SEO优化结构 — 良好的SEO结构让你的网站更容易被搜索引擎发现,提升品牌曝光度,带来更多潜在客户。 作为一名程序员,时间就是金钱,效率就是生命。合理利用模板,让你的项目开发事半功倍,立刻启动你的互联网成功...

    企业网站HTML源码-超越服务机构响应式网页模板-可适配移动端.zip

    SEO优化结构 — 良好的SEO结构让你的网站更容易被搜索引擎发现,提升品牌曝光度,带来更多潜在客户。 作为一名程序员,时间就是金钱,效率就是生命。合理利用模板,让你的项目开发事半功倍,立刻启动你的互联网成功...

    XTpl模板引擎 v2.0.zip

    本人自认为XTpl完全超越了Smarty,DZ,ECShop之类的模板引擎!   目录说明: cache/ 示例中的模板缓存目录, Linux类服务器需要设置为可写 templates/ 示例中的模板目录 templates/...

    XTplphp模板引擎v2.0

    XTpl 致力于最小, 最快, 最强大的PHP模板引擎(参考Smarty, SlightPHP, ECShop, DZ等开发) 特点: 小巧强大, 速度快, 效率高(仅一个类文件, 含注释5K) 简单易学, 没有像书一样的开发文档(8K的txt帮助文档) 支持原生PHP...

    laytpl 精致巧妙的JavaScript模板引擎

    Laytpl通过巧妙的实现方式,让模板引擎体积不到1KB,而性能则超越了许多知名的模板引擎,比如artTemplate、doT等,甚至在数据规模较大和渲染频率较高的情况下,性能优势更为明显。除了速度和体积的优势外,Laytpl还...

    Smarty是一个使用PHP写出来的模板

    5. **远超其他模板引擎的功能**:除了上述特性之外,Smarty还提供了许多高级功能,比如自定义函数、插件等,使其在功能上远远超越了其他同类模板引擎。 #### 四、适宜使用Smarty的情况 1. **需要实时更新显示内容...

    beetl模板语音教学

    允许优化,超越其他模板引擎** - **示例**: `gt.setOptimizeLevel(OptimizeLevel.Full);` - **优点**: 提高性能,减少资源消耗。 **4. 允许Byte直接输出** - **示例**: `template.renderTo(response....

    超越visio的edraw

    Edraw是一款全面的图形设计软件,它的核心优势在于其强大的绘图引擎和用户友好的界面设计。与Visio相比,Edraw不仅提供了更为广泛的图表类型,如组织结构图、流程图、思维导图、网络拓扑图、电路图等,还支持更多的...

    jinja-coreui:Jinja模板-CoreUI仪表板(免费版)| 应用种子

    该项目可以用作将来项目的代码库,也可以将Jinja文件和资产迁移到使用Jinja作为模板引擎(Flask,Bottle,Django)的基于Python的旧项目。 特征: UI套件:CoreUI仪表盘(免费版)由CoreUI - V3.2.0 渲染引擎:...

    Odmed:浏览器游戏引擎-开源

    它诞生于为“Loreas of Fire”项目定制的过程中,但其设计理念和功能使其超越了单一游戏的范畴,成为了一个适用于构建各种回合制游戏的强大工具。开源的特性使得开发者和游戏爱好者们能够自由地查看、修改和扩展其...

    超越梦想企业信息网页模板

    "超越梦想企业信息网页模板"是一款专为各类企业提供网页设计解决方案的模板,旨在帮助企业快速构建出专业且富有吸引力的官方网站。这款模板具有多种布局选择、色彩搭配和交互元素,能够满足不同行业的需求,同时简化...

    undersercore源码分析

    - 模板引擎:Underscore提供了一种简单的模板引擎,用于渲染字符串模板。 - mixin:允许开发者将一组方法混合到指定对象中,增强对象功能。 - 链式调用:使得可以将多个函数调用链接在一起,形成流畅的代码。 在...

    超越9200维修平台使用说明.pdf

    - **高速烧写引擎**:采用了VSI第三代烧写引擎,具有快速、稳定的特性,并且具备强大的三层保护机制,确保编程器的耐用性。 #### 二、支持的芯片类型 超越9200维修平台支持多种类型的芯片,具体包括: 1. **EPROM...

    超越旅行记录响应式网页模板

    "超越旅行记录响应式网页模板"是一个专为展示旅行经历设计的现代网页模板,它具有高度自适应的特点,能够在各种设备上(如桌面、平板、手机)提供优秀的用户体验。响应式设计是当前网页开发的重要趋势,它使得网页...

    nimception:使用Nim语法的Nim模板语言,可以在编译时完全评估

    在Nim中,模板引擎超越了传统的Web开发范畴,它可以生成任何类型的代码或数据结构,这得益于其编译时的代码生成能力。 ### Nim中的模板 Nim的模板是类似于函数的实体,但它们不具有返回值,且可以跨类型操作。模板...

    SQL Server 2008商业智能完美解决方案 3/3

    14.5 Integration Services数据流引擎 342 14.5.1 数据流缓冲区 342 14.5.2 同步数据流输出 346 14.5.3 异步数据流输出 346 14.6 日志提供程序 346 14.7 部署Integration Services包 347 14.7.1 包配置 347 14.7.2 ...

    易想最新升级包V4.0

    功能参考并集中了阿里巴巴、慧聪网、买麦网、中国化工网、第一建材网等国内知名商务网站的优点,并在某些方面超越了他们,YxB2B商务网已经协助国内外千家客户提供了专业的服务,易想网络将续推动中国信息化服务进程...

    基于CodeSimth的代码生成器

    总的来说,基于CodeSmith的代码生成器是一个强大的开发工具,通过高效的模板引擎,能够自动化许多重复的编码任务,从而节省大量时间和精力。如果你经常需要编写相似的代码,或者希望保持代码的一致性,那么CodeSmith...

Global site tag (gtag.js) - Google Analytics