控制器应该有多瘦,模型应该多胖?

时间:2011-02-28 21:54:55

标签: model-view-controller model controller kohana-3

控制器到底有多瘦?我理解将所有业务逻辑放在模型中,但其他事情呢。

例如,假设我正在撰写一个博客网站,每个用户都可以拥有多个帖子。目前,用户将通过访问posts控制器并运行create action来创建帖子。以下是目前会发生的一些小样本。

class Controller_Post extends Controller {
  function action_create() {
    if ( ! empty($_POST)) {
        $post = new Model_Post;
        $post->user_id = $this->logged_in_user->id;
        $post->values($_POST);
        if ( ! $post->create()) {
            echo 'Error';
        }
        else
        {
            echo 'Saved';
        }
    }
  }
}

我的问题是,什么会阻止我将上述逻辑放在用户模型中,就像这样。

class Model_User extends Model {
function create_post($post) {
            $post = Model::factory('post')->values($post);
    $post->user_id = $this->id;
    if ( ! $post->create()) {
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}
}

如果以这种方式完成,控制器将比我放置的更小。这对我来说更有意义,因为用户是创建帖子的人,所以我认为它应该在用户模型中,而不是控制器。

如果有帮助,我使用Kohana框架。

由于

1 个答案:

答案 0 :(得分:4)

控制器应该引导流量。模型适用于业务逻辑的位置,因此通常您的第二个示例是“正确的mvc”。

基本上控制器应该做的是请求输入,告诉模型改变状态(他们自己做实际的状态改变),并确定要显示的视图(如果有的话)。

我有很多控制器,就像这样:

class Controller_Foobar extends Controller
{
    public function action_index() {}
}

如果他们需要处理$ _POST输入,他们会抓取这些数据,并将其发送到模型,然后发送到视图。

将所有逻辑保留在模型中可以让您轻松地重复使用它,并且它更易于维护和测试。

相关问题