AgileTemplate的前言

过年前写的, 本来想发布AgileTemplate的. 不过现在想想, 发布何用呢? 因为核心并不是什么模板, 而是Model.

——————-

是不是常会有这样的疑问?

Q:为什么我要在PHP中使用模板语言?

通常的答案是因为设计人员不懂PHP, 所以需要用其他的标签来代替.但是真的是“这样”么?

最初的时候, 由于PHP的能与HTML混合在一起的特性使很多的PHP开发人员习惯于将PHP代码与HTML代码混写与一起, 最终导致代码的混乱和难以维护, 并最终导致了针对PHP的各种模板引擎, 模板语言的出现. 如大名顶顶的smarty. 甚至使用模板成为PHP开发的系统的一种值得炫耀的特性. 然而事实真的如此么?

事实上你看到的仅仅是一种物理上的分离罢了. 治标而不治本. 想想看, 为什么Perl, 为什么java需要模板? 正是因为他们缺乏与HTML混写的能力, 所以他们不得不寻找有效的视图解决方案, 而不是在代码中不断的输出. 所以从本质上来说, PHP是一种和jsp, velocity, freemarker甚至xlst一样的一种视图技术. 但重要的是, PHP还不仅仅是一种视图技术, 他同时具有解决数据访问和业务逻辑处理能力的强大的技术. 而其实恰恰因为PHP的强大能力, 及没有进行面向应用方面的细分, 导致大量的PHP开发人员习惯性的将数据访问, 业务逻辑, 表现逻辑写在了一起.

从最初的PHPlib中的template, 到现在纷繁复杂的各类PHP的Template Engine, PHP开发者创造了无数种模板语言或者标签, 从本质上讲, 根本就是脱了裤子放屁, 但是有一点值得肯定, 他们的贡献在于使PHP开始面向应用面向方面进行细分. 但即使是抱着这样的态度, 也不能将PHP置之脑后, 然后弄一个所谓的自己规则和定义模板语言出来.

Related Posts

16 Responses to “AgileTemplate的前言”

  • HickWu Says at February 23rd, 2006 4:37 pm :

    嘿嘿,家门来了,Binzy也姓“吴”不是?

    “不是说不用smarty就是不用模板! 模板还是要用的, 但是不用smarty这样说实话很弱智的东西! ” 这回我理解你的意思了,可是为什么觉得Smarty“弱智”呢,:) Smarty的一些东西我也不怎么欣赏,尤其是那种ifelse之类,看同事写的模板累死了,n多if嵌套 :) 所以我觉得用Smarty应该有很多原则,比如尽量避免用ifelse之流,但是也说不上Smarty“弱智”啊 :)

    PHP中使用模板的一个好处是分离HTML和PHP,至于分离带来的好处,一个也是你说那样可以是“设计人员不懂PHP”,但是我感觉还有很多好处,一个重要的就是使程序结构相当清晰。纯PHP代码可以有很好的组织结构。我很注重程序的注释以及其他规范,甚至希望把部分“设计文档”写在php代码里(类似PhpMyAdmin那样组织一下注释的结构),可以由类似PhpDoc那样的工具从注释中抽取部分“设计文档”,这样做对文档维护很方便,也让代码易读,易维护。一定程度上,这个是我喜欢分离php和html的最重要的原因。当然还有其他原因喜欢模板。

    :) 一二段都是在反思吧,第三段说PHP融合了“数据访问”、“业务逻辑”、“表现逻辑”能力。第四段批评模板的同时,也肯定了模板的好,所以偶说老大你的答案不明确,嘿嘿,不许说我理解能力有问题啊 :)

    说真的,比较期待老大的AgileTemplate,嘿嘿,Smarty那玩意是有蛮多值得诟病的,不过很多时候,它还是我目前为止最好的选择。

  • 老王 Says at February 24th, 2006 8:46 am :

    对于模板,确实有很多的争论,我个人也赞同PHP本身就是很好的模板这样的说法,但是我并不排斥smarty这样的模板,存在就是道理!我以前做过一个自动建站的网站,有一个功能就是用户可以自己上传模板,这个情况下,用php本身做模板是不安全的,我说这个例子就是说php原生模板也好,smarty也好,别的也好,都有优点和缺点,不能笼统的说这个对,那个错,要放到一个具体的问题背景中来看。

    qq:317650271

  • Binzy Says at February 24th, 2006 9:41 am :

    smarty就安全了? 安全性不是充分理由. 就安全性而言, 超越模板一文的作者早就提到.
    而smarty本身可以插入php代码不说….. http://smarty.php.net/manual/en/language.function.php.php
    安全不是用这个来做的. 呵呵.

  • HickWu Says at February 24th, 2006 11:19 am :

    嘿嘿,Binzy贴的用是我绝对不用的!这确实是Smarty可圈可点的地方。一个工具提供我们很多功能,有选择的应用,才是正道。看过《Word 排版艺术》,才感叹以前自己不会word。word提供了那么多的功能,但是抓不住它的精髓,那Word就是垃圾。— 当然咯,虽然我对Word有了更深层次的认识,但是写不是用于发布传播的文档还是尽量避免使用Word。

  • HickWu Says at February 24th, 2006 11:25 am :

    尖括号被过滤掉?而不是转换了? :( <php></php>

  • Nio Says at February 24th, 2006 2:11 pm :

    Binzy 的观点和我的很相似 :)
    我早已厌恶了 Smarty 及各类模板,准确地说,应该是厌恶了模板引擎所提供的自成一体的模板标签/语法。其实对于美工而言,学习 Smarty 等模板语言和学习 PHP 基本输出语法难度是相近的,既然这样,为什么要指望美工能够帮编码人员很好地将需要输出的变量正确地放到恰当的位置呢,显示逻辑也是需要编码思想的,如果美工不会编程,那就只负责设计页面好了,最后编码人员负责写显示逻辑。

  • youshoux3 Says at February 25th, 2006 2:18 am :

    哈哈,关于template,不知道都多少所谓的designer往里面跳。现在都懒得提了。
    就吹吧,越是有人喜欢,你就越给他推荐。。。 。。。反正是投其所好嘛。

    smarty本身就是一个极其pattern范例,看他的plus function就能领悟不少,代码格式也极其规范,再从项目看,还采用了版本控制,还有bug追踪… ….

    尤其是里面的正则表达的写法,绝对不是一般人能写出来的。

    多好的一份代码啊!

    交待完这些,就尽量小声的嘀咕:用template就像你挑担,然后突然有个大力神在后面帮你扶一下,haha…

  • 老王 Says at February 27th, 2006 2:05 pm :

    smary可以在配置里禁用php代码的,我说那个例子就是为了说明任何东西,存在就是道理,不能根据个人的喜好而一言以蔽之,这样的话对别人也多少有误导的嫌疑。

  • KnightE Says at February 27th, 2006 3:30 pm :

    bz很多时候是个布道者;-)
    新的东西替换旧的东西时,难免会带来一些痛楚;
    落后的思想,不能因为一句“存在就是道理”而被延续,不被替换的。

    存在虽是道理,改变才能进步。

  • Binzy Says at February 27th, 2006 4:25 pm :

    to youshoux3,
    很遗憾, 看smarty的代码和项目管理不能给我现在的知识带来什么收获.

    to 老王,
    php可以很好的兼容任何使用php开发出来的所谓的模板引擎. 这样的情况下你说的问题是否ok?

  • 老王 Says at February 28th, 2006 9:18 am :

    to binzy:
    呵呵,俺觉得binzy还是多少有点偏激了,因为binzy是业界的大哥级人物,所以俺总关注着binzy的blog,正因为如此,我觉得binzy不应该过于主观的对某某说不,因为众多小弟往往会因为盲目的崇拜而被误导,从而曲解了binzy的意思,当然,这可能就是binzy的风格,俺前面说过,俺不排斥PHP本身的原生态模板,对于模板这个东西,向来有很多的争论,其实俺们没有必要说哪个就一定对,哪个就一定错,他们都有各自的利弊,smarty没有大家说的那么差,说个例子:比如它的透明式的缓存,缓存组等等有时候是很方便的,我同意KnightE的观点:存在虽是道理,改变才能进步。 但是我想说的是,没有十全十美的东西,改变也不意味着全盘的否定。

  • Binzy Says at February 28th, 2006 10:49 am :

    to 老王,
    个人性格吧. 其实重点在于不用smarty不代表不使用模板. 我从没有说要回复到以前那种混写的状态下去. 既然使用模板技术, 做透明缓存实在不是难事.
    个人建议你可以看一下webwork和spring的mvc, 当你发现他们可以随意使用view的时候, 耦合与具体的模板技术将是多么让人郁闷的事情.

    呵呵, 不过其实很遗憾, 目前为止只有小K一个人被我彻底的洗脑了.

  • HickWu Says at March 1st, 2006 4:55 pm :

    嘿嘿,偶感觉被洗过的人比较的多啊。。。 几个月没去phpe.net,最近发现几乎是一边倒。。。 我也有点“老王”的那种感觉,一边倒的里边有部分盲目崇拜的。没有意指”小K”的意思 :)

  • 老王 Says at March 2nd, 2006 9:41 am :

    呵呵,模板问题可能就在php里才被讨论的这么多,模板的使用除了要考虑技术因素,还得看程序员的接受度,使用惯性等等,说远点,如果我们实现了一个基于php的web framework,对于view模板的使用也不应该只采用一种,而应该采用类似Java接口实现的方式,尽量兼容已经广泛使用的模板引擎,让用户自己决定使用什么模板。
    况且,在mvc的架构中,使用什么样的view模板实在不是最要紧的问题,最要紧的是如何完美的实现领域逻辑的设计,但是实际中大多数程序员往往忽视了这一点,写了个function的集合,在外面套个class就说自己是oop了,用了个模板就说自己是mvc了。

    哦,突然发现自己跑题了,唉,打住。

  • ss Says at March 5th, 2006 7:34 pm :

    [URL=http://www.tom.com]st[/URL]

  • ss Says at March 5th, 2006 7:35 pm :

    msnmsn

Leave a Reply