@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 шагах - это что-то вроде подготовки данных

Поправьте, пожалуйста, и дайте щелбан если я где-то нарушил концепцию или накрутил лишнего.
Буду очень признателен сообществу :)
  • Вопрос задан
  • 831 просмотр
Пригласить эксперта
Ответы на вопрос 3
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 - рекомендую ознакомиться.
Ответ написан
prototype_denis
@prototype_denis
Symfony
Почитайте ответы Сергей Протько
https://toster.ru/user/Fesor/answers

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

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

Войти через центр авторизации
Похожие вопросы