Как я могу отделить SQL от моего PHP? - PullRequest
2 голосов
/ 27 августа 2009

Следуя указаниям дяди Боба в Чистый код , я бы хотел, чтобы в моем коде PHP не было SQL. В настоящее время я использую подготовленные операторы и разделил код доступа к базе данных на классы моделей.

Моя первоначальная мысль - разбить мой SQL на отдельные файлы SQL, а затем загрузить их во время выполнения. Так как это требует больше дискового ввода-вывода (мое внутреннее чувство), мне интересно, есть ли у кого-нибудь предложения сделать это по-другому.

Кроме того, мне интересно узнать, пробовал ли кто-нибудь это и какие дивиденды (если они есть, это окупается).

Спасибо.

Ответы [ 3 ]

7 голосов
/ 27 августа 2009

Мой вам совет не делать ошибку, которую многие делают, пытаясь превратить PHP во что-то, чем оно не является.

PHP - веб-ориентированный язык шаблонов, позволяющий встраивать код в HTML-страницы. Он имеет жизненный цикл запроса, а не постоянный (как Java-сервлеты). Его API в основном носят процедурный характер.

Ничего из этого не является проблемой.

Тем не менее, вы найдете людей, которые настаивают на том, чтобы пытаться форсировать объектные модели, ORM и другие структуры, к которым они привыкли, из C # или Java-программирования на PHP, и часто это ошибка.

Чтобы конкретно ответить на ваш вопрос, я склонен помещать все свои запросы (функции) в один файл (или больше, если их много, и в этом случае я разделю их по базе данных или по некоторому функциональному разделению) и SQL просто в heredocs в функциях. Полезно не встраивать логику SQL во весь код.

Вы можете поместить этот SQL в текстовые файлы и использовать file_get_contents(), но что вы получите?

Нет никакого смысла в том, чтобы пытаться применять принципы из других языков и фреймворков к PHP. Используйте PHP для того, в чем он хорош (или используйте что-то еще). Вы будете счастливее в любом случае.

7 голосов
/ 27 августа 2009

Если вы просто хотите отделить SQL, почему бы не использовать хранимые процедуры?

4 голосов
/ 27 августа 2009

Я думаю, вы ищете слой доступа к данным. Я не читал «Чистый код», но я предполагаю, что дядя Боб хочет, чтобы у меня не было кучки исходного кода SQL и кода настройки / доступа к базе данных повсюду. Абстрагируйте базу данных, подготовьте, выполните и т. Д. Код в отдельный модуль и работайте оттуда.

Комментарий об использовании хранимых процедур также является хорошей идеей, хотя это очень обсуждаемая тема с хорошими замечаниями с обеих сторон. Я склонен использовать SP, но они не для всех или для каждой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...