Я читал и узнавал об объектно-ориентированном программировании ( Head First Объектно-ориентированный анализ и проектирование и Код завершен: практическое руководство по созданию программного обеспечения - благодаря предложениямнайдено на StackOverflow).Я также изучал, как использовать пару сред PHP MVC (в частности, Codeigniter и Kohana ).
Некоторые из принципов объектно-ориентированного, что я 'мы читаем о том, что MVC по-разному обрабатывает их.Я думаю, что мне удалось понять различия и то, почему решения были приняты (полное и простое в использовании решение), но я хотел проверить свои предположения ... так что, если вы будете шутить со мной ... пожалуйста, прокомментируйте или исправьте.
Предположение № 1:
Если подумать о правильной абстракции для веб-приложения, каталог, содержащий библиотеку классов, должен располагаться вне каталога, содержащего файлы презентации.,Эта организация придерживается принципа СУХОЙ («Не повторяйся»), который позволяет нескольким папкам презентаций (www.domain.com, management.domain.com, api.domain.com и т. Д.) Работать с одними и теми же объектами.
Предположение № 2:
Если все ваши классы расположены за пределами папок презентации, то модели в вашей реализации MVC просто используют экземпляры этих классов.Если это так, то инфраструктура MVC - это просто класс представления (контроллер), который помогает управлять вводом (запросы GET & POST), ответом (модели или экземпляры) и выводом (представления или шаблоны).
Предположение № 3:
Если инфраструктура MVC является просто классом представления, то класс базы данных, который инициализирует экземпляр контроллера, нарушает абстракцию класса контроллера.Модель (экземпляра контроллера) не должна иметь («имеет») базу данных, у нее должна быть вещь (пользователь, продукт) из библиотеки классов, и у этой вещи должна быть база данных.
Предположение # 4:
Более того, если инфраструктура MVC является просто классом представления, класс базы данных, который инициализирует экземпляр контроллера, слишком тесно связан с классом контроллера.Переход от одного метода хранения к другому требует перефакторинга всех моделей.
Предположение № 5:
При использовании инфраструктуры HMVC проблемы с контроллером, содержащиебаза данных хуже, потому что ваши модели больше модульные (больше моделей, больше рефакторинг).
ОБНОВЛЕНИЕ:
Извините, возможно, я использовал термины контроллери модель немного свободно ... может быть, это говорит о жесткой связи.Источником моей путаницы является синтаксис класса базы данных .
Для модели не должно быть:
$user = new User($id);
$data['name'] = $user->getName();
$data['title'] = $user->getTitle();
return $data
Вместо:
$query = $this->db->get_where('user', array('id' => $id), 1, 0);
$row = $query->row_array();
$data['name'] = $row['name'];
$data['title'] = $row['title'];
return $data