Мы постоянно используем паттерны программирования, не осознавая этого. Не задумываемся о том, почему в проектах используется именно такая архитектура, почему структуру проекта и даже названия файлов используют именно по таким общепринятым канонам.
В этой статье я предлагаю разобраться с одними из самых употребляемых паттернов — MVP и его предком MVC.
Начнем в хронологической последовательности с паттерна MVC — этот паттерн был создан в 1970-х годах и его целью было разбиение любой программы, с которой взаимодействует пользователь, на три логических блока:
В общем, у нас получается циркуляционное взаимодействие наших трех модулей — то есть по кругу:
Мы рассмотрели, с чего все началось, и теперь готовы пойти дальше.
Рассмотрим паттерн MVP — он отличается только одним модулем, но совершенно другим взаимодействием между ними.
Как видим, у нас теперь вместо модуля Controller модуль Presenter, но самое главное — это то, как изменилось их взаимодействие.
Теперь модули View и Model общаются исключительно через модуль Presenter, который является посредником: делает все, что делал Controller, обращается к Model, ждет ответа, получает его и передает результат View.
Рассмотрим все на примере простого проекта, имеющего визуальную часть View-модель (index.html), Presenter из одного файла и большой модуль Model.
Вы можете скачать и протестировать проект с GitHub.
View:
В модуле View у нас есть только разметка, которая будет отображена у пользователя, и импортируем нужные нам скрипты включительно и с презентером.
Presenter:
Файл presenter/index.js
работает непосредственно с html — изменяет его, опираясь на действия пользователя и данные, получаемые от запросов к модели Model.
В файле presenter/requests.js
есть функционал запросов к Model по url–адресам и выполняется с помощью axios
.
Model:
Файл model/index.js
– «сердце» нашего сервера, здесь мы запускаем http-сервер и принимаем запросы по назначенным url-адресам.
Файл model/src/getAllMessages.js
— одна из наших функций, которая после выполнения отдает ответ Presenter, который, в свою очередь, меняет View, который отрисовывается по новым данным.
Мы с вами рассмотрели одни из наиболее употребляемых паттернов и теперь понимаем, что они созданы для того, чтобы изменяя логику одной модели, мы не нуждались в изменении логики во всем приложении и могли, например, по необходимости, заменить модель Model на новый код по современным стандартам или же вообще сменить сервер — и это совсем не повлияет на работу других модулей.
Итак, завершая эту статью, я хочу сказать: «Разделяйте и властвуйте».
Продуктивного вам кодинга 😉
В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…
Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…
«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…
Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…
Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…
Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…