Соответствующий подход Codeigniter для доступа к модели в стиле MVC


В настоящее время я работаю над проектом с CodeIgniter и его HMVC. http://jenssegers.be/projects/CodeIgniter-HMVC-Modules)

У меня есть общий вопрос относительно наилучшего способа загрузки модели в другой модуль. До сих пор я думал, что прямая загрузка модели в другой модуль будет противоречить правилу MVC, и доступ к модели будет осуществляться косвенно путем создания функции в контроллере владельца модели.

Например,

class A
{
    function __construct()
    {
        ....
        $this->load->model('Model_A');
    }
    function getUsers()
    {
        $this->Model_A->getUsers();
        return $users;
    }
}

Class B
{
    ....
    function getModelAUsers()
    {
        $users_from_A = Modules::run('A/getUsers');  // This is currently how I do

        $this->load->model('A/Model_A'); // This is probably how I could do.
        $users_from_A = $this->Model_A->getUsers(); 
    }
}

Честно говоря, создавая отдельные функции для доступа к такой модели - это заноза в заднице... и чем больше я кодирую, тем труднее мне его рефакторировать. Какой способ является правильным для доступа к модели в другом модуле в стиле MVC? или есть другой лучший способ сделать это?

Еще одна вещь. Этот проект будет сильно переработан и часто обновляться.

Author: Raccoon, 2014-02-03

1 answers

У меня была та же проблема, и в конце концов я решил загрузить модель внутри модели, когда это необходимо. Это не противоречит MVC, потому что MVC больше касается потока данных, чем системных компонентов, включая (загрузку). "Обычно" (без CI) вы бы использовали автоматическую загрузку класса (http://www.php.net/manual/en/language.oop5.autoload.php ), в то время как Codeigniter не поддерживает эту загрузку моделей внутри моделей, это не грех.

Также полезно заметить, что даже если вы загрузите какую-то модель более одного раза Codeigniter просто проигнорирует это. Так что даже если вы загрузите какую-то модель дважды, ничего плохого не произойдет.

 1
Author: Robert Trzebiński, 2014-02-03 16:57:31