#php #model-view-controller #factory-pattern
#php #модель-представление-контроллер #фабрика-шаблон
Вопрос:
Я написал приличный фреймворк MVC, основанный на нескольких надежных руководствах и сильно заимствованный у Cake. Это соответствует нашим потребностям, потому что у нас уже есть существующее приложение, на основе которого мы создаем.
Моя ситуация следующая: у меня есть модель, которая описывает, скажем, команду. У этой команды есть свойства, методы, бла-бла-бла. В моем контроллере я могу довольно легко создать одну команду с помощью:
$team = new Team('Hornets')
Это отлично работает. Однако, допустим, я хочу иметь метод, который возвращает все команды для данной страны? Перед использованием MVC я бы просто создал класс factory и выполнил:
$teams = Array();
$teams = TeamFactory::getTeams('Canada')
Это вернет массив команд. Думаю, я все еще могу это сделать, но мой основной вопрос заключается в том, где бы мне хранить эти фабричные классы в моей структуре папок?
У меня есть папка под названием «lib» в корневом каталоге, где я храню различные классы, которые я использую на регулярной основе. Меня беспокоит только то, что эта папка превратится в большой беспорядочный беспорядок «Team.Factory.php «, «Проигрыватель.Factory.php «, смешанный со всем остальным материалом. Мой собственный инстинкт заключается в том, чтобы, возможно, создать подпапку внутри «lib» под названием «factory», а затем продолжить.
Это «не-MVC»? На фоне этой записи?
Комментарии:
1. У меня только что появилась идея поместить класс factory в тот же файл, что и модель. Два класса, один файл … но я думаю, что это чище, и мне не нужно обновлять мой автозагрузчик.
2. Не слушайте меня — выбранный ответ на самом деле аккуратнее
Ответ №1:
MVC не возражает против структуры каталогов. Я бы сохранил класс TeamFactory в том же каталоге, что и класс Team, или, возможно, создал бы в нем подкаталог и поместил его туда. Вот что я имею в виду:
model/Team.php
model/TeamFactory.php
или
model/Team.php
model/factories/TeamFactory.php