slime09 发表于 2011-4-27 11:00:53

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

最近在用ci和doctrine配合开发程序,和同事有了一些分歧。同事认为,controller里面
$product = Doctrine_Core::getTable('Products')->find($id);
就可以了,然后在view视图里取数据,比如取产品有图片,需要leftjoin图片库时,直接在view视图里面写:
$product->Image->midthumb
这样的好处在于工作量较小,由于doctrine的特性,view视图里用到什么,才去取什么,并不用担心系统资源的损耗。
我认为,应该在controller里面取好所有数据,例如
$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视图里面取缩略图时,写:
$product['thumb']
就可以了。
这样比较符合mvc的规范,同时有两个好处:
一是可以为产品数据设置缓存(很多时候,比如需要用户登录时,页面缓存是不适用的);
二是view视图的开发人员通常是新手或比较擅长css/jquery之类的前端架构,不应该在数据库结构上给他们增加难度。

大家觉得哪种方法比较合理?

slime09 发表于 2011-4-29 10:04:29

无人理会,默默飘过......

BruceWolf 发表于 2011-4-29 13:38:52

后者更好。
就从程序是否能执行而言,第一种方案无大碍。但是Contorller 在这里只是相当于一个 Model,输出了数据,但是却不处理数据。出现数据库或者业务逻辑修改的时候还要同步的维护 view 里面的数据逻辑。
第二种方案结构清晰,所有业务逻辑都在 Controller 里面,以后的维护只要关注 Controller 就行了,不用去考虑 View 的存在,因为 view 里不存在业务逻辑,只有数据传递。

MVC 是一种编程思想,而不仅仅是说分别继承了几个类就是 MVC。

slime09 发表于 2011-4-29 17:24:39

嗯,谢谢,我也这么想的。
页: [1]
查看完整版本: 在ci和doctrine配合使用时与同事发生了一点分歧,谁对?