@bunk

Как правильно реализовать паттерн MVC?

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

Вопрос заключается в следующем:
/ru/category/city/subcategory/article

по поводу реализации патерна думаю как:
1. получение запроса пользователя контроллером (InController)
2. проверяем валидность адреса (оставляем только валидную часть) - подключаемая библиотека CheckURI
3. проверяем девайс пользователя (мобильный/планшет/десктоп) - подключаемая библиотека MobileDetect
4. проверяем авторизован ли пользователь
5. формирование массива входящих данных и выбор модели на которую поступят эти данные для обработки
6. определяем используемую модель (Mobile_Category) которая тянет данные из БД и определяет представление (Mobile_Subcategory)
7. передача данных на контроллер (OutController)
8. вывод пользователю

я просто хотел разделить контроллеры получающие данные и отдающие данные… пусть даже это будет 1 класс, но разные методы… но все же думаю о разных классах
а вот сам MVC реализовывать в порядке Model-View-Controller - сначала работает модель, потом подтягивается представление, и уже потом передача на контроллер
все что у меня выходит в первых 3 шагах - это что-то вроде подготовки данных

Поправьте, пожалуйста, и дайте щелбан если я где-то нарушил концепцию или накрутил лишнего.
Буду очень признателен сообществу :)
  • Вопрос задан
  • 850 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ваша задача - не зацикливаться на аббривиатуре MVC и подумать над тем, как отделить HTTP от приложения. Для упрощения представьте что:

- view - это HTTP запрос и ответ. Это представление данных которое требует от сервера клиент.
- model - это ваше приложение которое ничего не знает о HTTP
- controller - это не один класс, а возможно целая цепочка классов, чья задача - абстрагирование модели от HTTP. Можно воспринимать ее как цепочку адаптеров. Запрос приходит в один адаптер - там разруливаем маршрутизацию, нашли контроллер - передаем дальше. Со временем адаптеры могут добавляться, например для добавления CORS или аутентификации могут быть дополнительные "адаптеры" (гуглить про middelwares, PSR-7 и т.д.)

Так же не забываем про принцип инверсии контроля (Inversion of control). Фреймворк должен вызывать ваш код а не ваш код дергать фреймворк. То есть именно контроллеры дергают модель а не наоборот. Модель ничего не должна знать ни о view ни о контроллерах.

Удачи.

p.s. я описал mediating controller MVC, оригинальный же паттерн MVC 79-ого года на бэкэнде не применим.

p.p.s. Перед имплементацией MVC рекомендую познакомиться с такими инструментами как composer. И например роутер сходу не писать свой. И ради бога не используйте PHP как шаблонизатор (гуглить про то что такое XSS), возьмите twig.

p.p.p.s https://github.com/pmjones/adr - рекомендую ознакомиться.
Ответ написан
@vashaaa
Юх с горы
Взять самый легкий фреймворк codeigniter и подсмотреть не вариант? За день два разберетесь, там и поймете что хотите. У вас все очень классно разписано, не спорю, но реализовать это с начальными знаниями(как вы говорите) и без знания каких либо других фреймворков будет тяжело если не возможно. В голове картину нарисовать легко, попробуйте её на холст перенести). Почти у всех кто пробывал сделать свой фреймворк была такая история:"Нарисовал идею в голове/бумаге, начал пробывать пилить, пилишь пилишь. -Тьфу дерьмо какое!!!... Снес все под чистую. Начал с нуля. Этот пункт повторяеться 3-5 раз в зависимости от настойчивости(овны и козероги привет). Потом береться фреймворк, смотриться что и как сделано. Пытаемся взять основную идею, но сделать по своему. Пилим пилим. Опять пункт про " -Тьфу дерьмо какое!!!.Сносим". В итоге повторяем почти все, но допиливаем что-то свое, что кажеться нам нужным и уместным. В итоге из таких вот франкинштейнов потом выходят свои cms , которые они знаю вдоль и поперек(сам же пилил, пыхтел) и возможно даже используються(некоторые так и пилят сайтики на своих cms, когда видят что дописывать функционал к "своему детищу" куда легче чем допиливать wordpress)". Такие вот дела. Пробуйте, пригодиться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 14:10
500 руб./за проект
19 апр. 2024, в 13:31
10000 руб./за проект