php模板和MVC

最近在PHPE上关于模板的讨论很激烈。这里我总结下自己的看法。
  为什么会有模板?模板本身是为了分离显示逻辑和业务逻辑,让对显示逻辑的修改更加容易。而MVC也同样有这个目的。MVC对降低程序的耦合度,使程序便于修改是很有帮助的。从这个意义上讲,模板是很有用的,这也是多数人的共识。但模板应该是什么样子呢?
  模板有两类,一类是给程序员用的,功能多,但不容易学。这类模板的目的是为了消除显示逻辑中的一些重复的东西,简化开发。一类是给美工或其他非程序员的用户用的,这类模板只表示简单的,与实际环境相关的意义,用于二次开发,或者为了使美工和程序能够独立工作。
  对于第一类模板,我赞同一些人的观点:php本身就是模板。从本质上讲,php语言的目的就是作为模板。但是,如果通过模板程序对php做一些扩展,让模板更加容易使用不是也很好么,不必在抛弃了smarty这样的笨重的东西以后,走向另一个极端。比如,在输出的时候,经常要有一些像

title)); ?>

这样的东西。如果能用{{$article->title}}代替,不是方便很多么?论坛上有人建议用title)?>这样的方式。这样一方面要有一个o()的全局寒暑,而且这样的一个简短的函数名也不便于理解,会降低程序的可读性。也有人建议在输出前就把变量做完转换。这样一方面每次输出都要做一次,是个很大的麻烦,而且把本该属于View的东西放到了Controller里。有这么一句话,一个工具是否会被使用,在于它是否就在手边。很多网站都会有一些地方没做处理,是程序员不知道字符转换的重要性么?其实,程序员也是人,总会有忘记的时候。在模板程序中提供这样的功能,就不用担心会忘了字符的转换。比如在我现在的尝试中,一个输出文章列表的模板可能会是这样:

  • {{$article->title}}

  一方面充分发挥了php语言本身的表达力,又可以省掉一些麻烦。
 
  另一方面,对于一些常用的功能,比如分页,也可以利用模板程序来简化。既能保持灵活性,又能减少重复劳动。比如可以弄成这样: 上一页
下一页

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.