Это на удивление обширная тема, но у меня есть несколько советов, которые помогут вам в пути:
Вам следует изучить объектно-реляционное сопоставление, при котором объект автоматически генерирует SQL-запросы. Взгляните на объектно-реляционное сопоставление и Active Record. Это позволит сохранить минимальный объем кода базы данных и упростить задачу при изменении структуры таблицы.
Но серебряной пули тут нет. Если ваша схема изменится, вам придется изменить свои запросы, чтобы они соответствовали. Некоторые люди предпочитают решать эту проблему, инкапсулируя логику запросов в представлениях базы данных и хранимых процедурах. Это также хороший подход, если вы последовательны, но имейте в виду, что как только вы начнете писать хранимые процедуры, они будут сильно привязаны к конкретной базе данных, которую вы используете. В их использовании нет ничего плохого, но они значительно усложнят вам переключение баз данных в будущем - обычно это не проблема, а важный аспект, о котором следует помнить.
В любом случае, какой бы метод вы ни выбрали, я рекомендую вам хранить логику базы данных в нескольких классах «Модель». Похоже, вы уже делаете что-то подобное. Основная идея состоит в том, что каждая модель инкапсулирует логику для определенной области базы данных. Традиционно каждая модель сопоставляется с одной таблицей в БД - так работает класс активной записи Ruby on Rails. Это хорошая стратегия, поскольку она разбивает логику вашей базы данных на простые маленькие «куски». Если вы сохраните всю логику запросов к базе данных в одном файле, она может быстро выйти из-под контроля и превратиться в кошмар обслуживания - поверьте мне, я был там!
Чтобы лучше понять «общую картину», я рекомендую вам потратить некоторое время на чтение веб-архитектуры модель-представление-контроллер (MVC). Вы также захотите ознакомиться с установленными фреймворками PHP MVC, такими как CodeIgniter, Kohaha, CakePHP и т. д. Даже если вы не используете один - хотя я рекомендую вам это сделать - было бы полезно посмотреть, как эти фреймворки организуют ваш код.
person
Justin Ethier
schedule
08.05.2011