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

应该在model层里做些什么?

[复制链接]
发表于 2008-6-4 14:06:11 | 显示全部楼层 |阅读模式
有些东西不知不觉都写进了 controller 层里了,不知道应该在model层里做些什么,希望达人能贴些model的代码让小弟学习学习。
发表于 2008-6-4 20:37:44 | 显示全部楼层
有个概念叫三层结构
即,表现层,业务逻辑层,数据持久化层
一般把controller+view看成表现层

业务逻辑层和数据持久化才是工作的重点
一般来说框架有个目的就是希望程序员更专注于项目业务逻辑

ci,我认为应该和rails是相同的哲学理念,他的业务逻辑和model紧密联系
称为rich model,基本把业务逻辑整合到model里,但似乎我的这种理解目前看来有问题
如果业务逻辑不在model里处理,但就需要专门有个Service层来主力处理业务逻辑问题
但至少我至今没有看到类似的best practice,不过有一点肯定就是在controller只应该专注view的表现
如果里面过多涉及业务上的问题,肯定是欠妥的

当然这些都是业务逻辑比较复杂的时候才会碰到
如果只是做些crud,那就随便怎么样都无所谓了
发表于 2008-6-4 20:51:10 | 显示全部楼层
举例
我还是觉得应该 rich model

PHP复制代码
 
<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
 
        class ArticleModel extends MY_Model{
                public $tableName = "article";
 
                function ArticleModel(){
                parent::MY_Model();
            }
           
            #......
               #省略

 
 
                /*
                * 删除文章!
                    * blog的文章,文章下有评论
                *文章还属于特定的某个category
                * 删除文章下的所有评论,更新当前文章所在category的文章总数统计
                */

                function remove($article_id){
                        //原子操作
                        //do transaction
                        //得到article
                        $article = $this->get_by_id($article);
                        //删除所有评论
                        $this->comment_model->remove_by_article($article);
                        //更新category文章数目统计
                        $this->category_model->update_sum($article);
                        //删除文章
                        parent::remove_by_id($article_id);
                        //end transaction
                }
        }
 
?>
 
复制代码
发表于 2008-6-4 22:44:31 | 显示全部楼层
View <------>Controller
  \                                    /\
    \                                /
       \       Model <-- /
                   |
                  \|/
            Database


MVC模式,通俗的理解:用户通过View把请求的操作(数据)传递给Controller,Controller负责把操作指令传递给Model(调用相应的方法),Model会处理这些具体的指令(CURD),之后把结果返回给Controller,Controller再根据结果来控制View的呈现。故一般的,把对数据库操作(CURD)放在Model。
发表于 2008-6-6 22:57:18 | 显示全部楼层
model 主要由两部分组成:

数据的操作(CRUD)
数据的验证(validation)

controller 只管处理I/O (input/output)的逻辑,至于逻辑的内部结构则交由model去处理。所以,controller里的代码越精简越好。
发表于 2008-6-7 11:46:46 | 显示全部楼层
楼上有道理,不过还是有点范一般枢架MODEL层只搞数据库的偏见,也是一点失误。
我也是有这种思想,只在MODEL层搞数据库。

不过,最近看了一些文章,在MODEL层还是可以搞其它的。。
如搞一些图型,文件上传,还有一种常见的例子就是无限分类的目寻生成。等。。

总之,做站用到的所有函数都可以在MODEL上定义,不过这样有点不合情理。
发表于 2008-6-7 14:22:03 | 显示全部楼层
所谓的“数据”,并不单指数据库而已。:)

简单地说,“功能性”的东西大部分都能放model里。
发表于 2008-6-8 18:36:55 | 显示全部楼层
把什麽都扔到model去处理,这样很好么,让controller弱化成为数据传输通道而已,这是最新先进做法?
好处是什麽呢?这么做很高效?

本版积分规则