向控制器添加功能时的MVC最佳实践?

时间:2010-04-09 15:06:14

标签: model-view-controller

我在我的控制器中写了一个函数;这应该采取一种形式,处理它,在DB中注册用户,发送确认电子邮件等等。

为了避免这个函数过于混乱,我想调用一些子函数(例如:

function registration()
{
  //process form..

  _insertInDb($formdata)

  _send_mail($address);

  //load confirmation view..
}

function _send_mail($to)
{
  //code here
}

function _insertInDb($formdata)
{
  //other code here...
}

我不确定在控制器中编写所有函数是否是最佳实践 - 我可以在另一个文件中插入所有'支持'函数(例如本例中的send_mail和insertInDb),然后导入它们吗?

这可能会让控制器更具可读性。 你的看法是什么?

3 个答案:

答案 0 :(得分:2)

MVC只是一种表示模式,所有“业务逻辑”都应该位于“MVC”代码之外。你的应用程序应该完全相同,所有的MVC代码都会消失,并被其他东西取代。

我将创建一个单独的类,让控制器调用该类的实例,这将实现必要的数据库插入,发送电子邮件警报,进行日志记录等。

<强>更新

由于CodeIgniter似乎是基于php的CMS,我建议从这里开始深入了解详细信息 - http://php.net/manual/en/language.oop5.php

这样的代码可以让你朝着正确的方向前进:

<?php
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
?> 

答案 1 :(得分:1)

我假设你会使用apt图层来处理注册过程中的每一步。

  1. 处理用户请求
  2. 验证并注册
  3. 成功完成后发送确认通知。
  4. 来自控制器:


    1. ProcessRequest() - 将用户表单转换为用户实体,以便业务层可以理解(比如UserService)
    2. Registeruser() - 接收ProcessRequest()返回的User实体并将其发送给UserService()
    3. 基于来自UserService()的通知,SendNotification()进程进一步
    4. 来自业务层:( UserService)


      1. RegisterUser() - 在内部调用自己的方法'ValidateUser()'来验证用户信息
      2. 如果成功,它会请求DataAccessLayer(比如UserDAL)将其保存到数据库
      3. 如果没有,则会根据失败原因发出错误。
      4. 我保证它能满足您的期望。如果我错了,请纠正我。

        欢迎关注......

答案 2 :(得分:0)

SOLID的'S' - Single Responsibility Principle

将函数移动到自己的类中,这些类可以响应邮件,数据库插入等。

善,