Лучшая практика MVC при добавлении функций в контроллер? - PullRequest
3 голосов
/ 09 апреля 2010

Я пишу функцию в моем контроллере; это должно быть принято в форме, обработать ее, зарегистрировать пользователя в БД, отправить электронное письмо с подтверждением и т. д. и т. д.

чтобы эта функция не была слишком загромождена, я думал о вызове некоторых подфункций (например:

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 ]

2 голосов
/ 09 апреля 2010

MVC - это просто шаблон представления, вся ваша «бизнес-логика» должна находиться за пределами вашего кода «MVC». Ваше приложение должно работать точно так же, как и весь код MVC, который был удален и заменен чем-то другим.

Я бы создал отдельный класс и заставил бы контроллер вызывать экземпляр этого класса, который сделает необходимые вставки в БД, отправит оповещения по электронной почте, сделает запись в журнал и т. Д.

обновление

Поскольку CodeIgniter, похоже, является CMS на основе php, я рекомендую начать здесь с глубокой детализации - 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 голос
/ 24 сентября 2012

Я предполагаю, что вы будете использовать подходящие слои для обработки каждого шага в процессе регистрации.

  1. Обработка запроса пользователя
  2. Подтвердить и зарегистрировать
  3. Отправьте уведомление об успешном завершении.

с контроллера:


  1. ProcessRequest () - преобразует пользовательскую форму в пользовательскую сущность для понимания бизнес-уровнем (скажем, UserService)
  2. Registeruser () - принимает сущность пользователя, возвращенную ProcessRequest (), и отправляет ее в UserService ()
  3. на основании уведомления от UserService (), SendNotification () обрабатывается далее

Из бизнес-уровня: (UserService)


  1. RegisterUser () - внутренне вызывает свой собственный метод ValidateUser () для проверки информации о пользователе
  2. Если это успешно, он запрашивает DataAccessLayer (скажем, UserDAL), чтобы сохранить его в базе данных
  3. Если нет, то отправляет сообщение об ошибке, в частности, на каком основании оно было ошибочным.

Я заверяю, что это обеспечивает то, что вы ожидали. Поправь меня, если я ошибаюсь ..

Добро пожаловать с уважением ...

0 голосов
/ 09 апреля 2010

SOLID 'S' - Принцип единой ответственности

Перемещение функций в их собственные классы, которые отвечают за рассылку, вставку базы данных и т. Д.

Доброжелательность,

Dan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...