视图与数据分离

视图与数据的分离是一个很久很久的问题了,他是很多MVC框架都想要解决的问题!

我经理特别倾向于使用Smarty,我就感觉不出来Smarty有什么好的!

我现在已经使用yii开发项目了,如果在把Smary引入进来,我都不知道怎么做了!

坦白讲,我感觉使用yii的layouts就可以解决这些问题了啊!

有没有更好的方法啊?

其实实际项目里面没有什么视图与数据分离的(暂时我接触到的都是这样,所以纯粹浅见~~~),到了最后,还不是由程序员把代码套到html里面,作为一个程序员,难道连php不懂也去搞? :)

yii也支持smarty的,不过完全没什么必要。

欢迎听到你更好的想法

谢谢David!

其实这个问题正如你所说的,视图跟逻辑的分离并不是很清晰!

我不清楚php框架是怎么处理视图与数据的,因为我学习php和yii也不过一个月而已!

我是学java出身的,所以我了解类似struts和spring这些MVC架构对视图与数据的处理。

基本上讲,这些框架确实将视图和逻辑分开了,然后将逻辑处理过的数据放入视图中。

问题在于在视图中如何显示这些数据,struts和spring都提供了自己的标签,

而且java官方也提供了JSTL标签,目的很显然,视图层必须使用自己的规则去显示这些数据。

问题不仅仅如何,表单验证同样是个棘手的事情,框架提供给标签的另一个原因就是透明的跟业务逻辑(比如验证)相关联。

这样一来,页面美工人员只需要了解这些标签的使用就可以完成页面的独立编写了,减轻程序员的负担。

所以我得出的结论是视图真的很难和业务数据分离。

在说yii框架,yii框架的视图也数据的分离使用的缓冲技术,同样也解决了两者的分离。

同样的,yii也提供了widget来提供特殊的视图,来帮助表单验证或者其他操作。

而Smarty仅仅是一个视图框架而已,我并不反对使用Smarty,因为Smarty确实做的不错!

能够帮助我们解决视图层上的大部分问题。

但是,我现在的问题是为了解决视图和数据的分离来引入Smarty吗?

本来我已经使用yii框架了,当然yii使用Smarty也不是问题,关键在于引入Smarty后由把我的项目设计打乱了!

哦,天啊,今天决定说服经理放弃Smarty。

smarty以及其它类似的模板框架是上一代的东西了,现在的趋势是用PHP本身做模板语言,这样既提高执行效率,也降低学习成本。

视图和数据的分离并不取决于模板或框架,它更多的是一种规范,需要自觉遵守。模板或框架的意义在于能更好得帮助用户进行视图数据的分离。

在Yii里,视图和数据的分离是很清楚的:视图就是view,使用PHP语言;数据就是model对象(或普通数组)。Yii的表单验证也很简单,你可以参考各种范例。

现代的动态网页设计让美工完全负责视图的实现是不太现实的,尤其是网页里嵌有很多ajax操作,需要和服务器端的控制以及数据进行交互。

一般来说,视图里应该避免复杂的PHP逻辑,尤其是数据存储操作。最好是只使用简单的表达式,只进行数据读取以及格式化。如果能做到这些,美工的工作就相对简单许多了。

看了2位的交谈收益匪浅~ :rolleyes:

smarty以及其它类似的模板框架是上一代的东西了,确实,以前用过smarty已经很久没用了,现在都忘记了,还是用原生的php比较爽!