【问题标题】:MVC best practice when adding functions to controller?向控制器添加功能时的 MVC 最佳实践?
【发布时间】:2010-04-09 15:06:14
【问题描述】:

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

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

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)插入另一个文件,然后导入它们?

这可能会使控制器更具可读性.. 你怎么看?

【问题讨论】:

    标签: model-view-controller


    【解决方案1】:

    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;
        }
    }
    ?> 
    

    【讨论】:

    • 好的,所以现在我只需要弄清楚如何在 codeigniter 中创建和调用一个新类......有什么建议吗? :)
    【解决方案2】:

    我假设您会使用 apt 层来处理注册过程中的每个步骤。

    1. 处理用户请求
    2. 验证和注册
    3. 成功完成后发送确认通知。

    来自控制器:


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

    从业务层:(用户服务)


    1. RegisterUser() - 在内部调用自己的方法 'ValidateUser()' 来验证用户信息
    2. 如果成功,它会请求 DataAccessLayer(比如 UserDAL)将其保存到数据库
    3. 如果不是,则发送错误,具体说明失败的原因。

    我保证它提供您所期望的。如果我错了,请纠正我..

    欢迎您...

    【讨论】:

      【解决方案3】:

      SOLID 的“S” - Single Responsibility Principle

      将函数移到它们自己的类中,这些类负责邮件、数据库插入等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-17
        • 2012-09-10
        • 2018-03-20
        • 2018-09-24
        • 1970-01-01
        • 2010-11-01
        相关资源
        最近更新 更多