用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3820|回复: 3
收起左侧

[数据库] 在ci和doctrine配合使用时与同事发生了一点分歧,谁对?

[复制链接]
发表于 2011-4-27 11:00:53 | 显示全部楼层 |阅读模式
最近在用ci和doctrine配合开发程序,和同事有了一些分歧。同事认为,controller里面
  1. $product = Doctrine_Core::getTable('Products')->find($id);
复制代码

就可以了,然后在view视图里取数据,比如取产品有图片,需要leftjoin图片库时,直接在view视图里面写:
  1. $product->Image->midthumb
复制代码

这样的好处在于工作量较小,由于doctrine的特性,view视图里用到什么,才去取什么,并不用担心系统资源的损耗。
我认为,应该在controller里面取好所有数据,例如
  1. $product = Doctrine_Query::create()                        ->from('Product p,p.Image i')                        ->select('p.something,i.midthumb as thumb')                        ->where('p.id= ?',$id);$product = $query->execute();
复制代码

然后在view视图里面取缩略图时,写:
  1. $product['thumb']
复制代码

就可以了。
这样比较符合mvc的规范,同时有两个好处:
一是可以为产品数据设置缓存(很多时候,比如需要用户登录时,页面缓存是不适用的);
二是view视图的开发人员通常是新手或比较擅长css/jquery之类的前端架构,不应该在数据库结构上给他们增加难度。

大家觉得哪种方法比较合理?
 楼主| 发表于 2011-4-29 10:04:29 | 显示全部楼层
无人理会,默默飘过......
发表于 2011-4-29 13:38:52 | 显示全部楼层
后者更好。
就从程序是否能执行而言,第一种方案无大碍。但是Contorller 在这里只是相当于一个 Model,输出了数据,但是却不处理数据。出现数据库或者业务逻辑修改的时候还要同步的维护 view 里面的数据逻辑。
第二种方案结构清晰,所有业务逻辑都在 Controller 里面,以后的维护只要关注 Controller 就行了,不用去考虑 View 的存在,因为 view 里不存在业务逻辑,只有数据传递。

MVC 是一种编程思想,而不仅仅是说分别继承了几个类就是 MVC。
 楼主| 发表于 2011-4-29 17:24:39 | 显示全部楼层
嗯,谢谢,我也这么想的。

本版积分规则