Найти в Дзене
Егор Гусаков

Store или где хранить запросы в базу данных.

И так, рано или поздно у всех разработчиков, хочется в это верить, встает вопрос на повестку дня «А где же все-таки хранить запросы в базу данных ?». Самый простой ответ на данный вопрос, с учетом того, что мы живем в мире MVC — в моделях или в контроллерах, но этот ответ настолько просто насколько и недальновидный. Так вот, чтобы не допускать такой мешанины в коде и разнести зоны ответственности, как раз и стоит использовать store. Пример на чистом PHP Класс ArticleStore содержит методы для выполнения запросов к таблице articles. Обратите внимание, что мы используем подготовленные запросы, что делает код более безопасным и предотвращает SQL-инъекции. Давайте разберем преимущества, по сравнения с написанием запросов к базе данных в моделях или контроллерах, которые вы получите при использовании storeв своем проекте: В итоге использование store для запросов к базе данных позволяет улучшить архитектуру вашего приложения, упростить его обслуживание и сделать код более чистым и поддерживае

И так, рано или поздно у всех разработчиков, хочется в это верить, встает вопрос на повестку дня «А где же все-таки хранить запросы в базу данных ?». Самый простой ответ на данный вопрос, с учетом того, что мы живем в мире MVC — в моделях или в контроллерах, но этот ответ настолько просто насколько и недальновидный.

  1. Запросы в моделях. В целом если рассматривать модели, реализующие шаблон ActiveRecord, а это модели в подавляющем числе фреймворков, то главным недостатком таких моделей будет являться их гиперответственность. То есть заглянув в модель, мы можем увидеть, что она представляет собой объект бизнес данных, правил и логики, что по определению нарушает кучу принципов написания кода.
  2. Запросы в контроллерах. Думаю этот вариант является самым плохим, ведь раздувая ваши контроллеры, вы делаете вашу систему более сложной в обслуживание, не говоря уже о том, что ваш код будет нарушать кучу принципов (привет от принципа единой ответственности). Помимо этого написав запрос напрямую в методе контроллера, вы лишаете себя возможности пере использовать запрос в других местах.

Так вот, чтобы не допускать такой мешанины в коде и разнести зоны ответственности, как раз и стоит использовать store.

Пример на чистом PHP

Класс ArticleStore содержит методы для выполнения запросов к таблице articles. Обратите внимание, что мы используем подготовленные запросы, что делает код более безопасным и предотвращает SQL-инъекции.

Давайте разберем преимущества, по сравнения с написанием запросов к базе данных в моделях или контроллерах, которые вы получите при использовании storeв своем проекте:

  1. Пере использование запросов. Вы можете создавать запросы в store и затем использовать их в разных частях вашего приложения, без необходимости повторного написания кода. Это не только экономит время, но и помогает сохранять единообразие в вашем коде.
  2. Улучшение масштабируемости. Использование store также позволяет сделать ваше приложение более масштабируемым. Вы можете легко заменить базу данных или реализацию, не переписывая много кода, в первом случае потребуется опрокинуть необходимый коннект, а во втором store, соответствующий необходимому интерфейсу.
  3. Улучшение читабельности кода. store позволяет сделать код более читаемым и поддерживаемым, поскольку запросы к базе данных выносятся в отдельный уровень абстракции, что упрощает понимание логики приложения.
  4. Облегченный поиск по проекту. Так как все обращения вашего приложения с БД происходит через store, мы всегда можем отследить где в приложении используется тот или иной запрос, так как все запросы представлены в виде методов store, а современный IDE имеют замечательный поиск по коду мест где используется методов класса.
  5. Улучшенная модульность, поскольку логика доступа к данным отделена от бизнес-логики.
  6. Упрощенное тестирование благодаря возможности заменить реальные данные на моковые данные в store.

В итоге использование store для запросов к базе данных позволяет улучшить архитектуру вашего приложения, упростить его обслуживание и сделать код более чистым и поддерживаемым.