Бизнес-уровень, уровень данных, куда помещать запросы?
-
18-09-2019 - |
Вопрос
У меня есть уровень доступа к данным, который имеет отдельные классы для каждой таблицы в базе данных.Каждый класс создает объекты, которые ссылаются на строку в таблице, у них есть функции create, update, delete и fetch.Все они расширяют класс DBObj.Мой вопрос в том, допустим, я хочу написать запрос к SELECT * FROM table
, и иметь это в функции.Где лучше всего это разместить?На бизнес-уровне или сгруппировать все связанные функции в соответствующих классах уровня данных?Это на PHP, если это имеет значение, с использованием MySQL.
Решение
Поместите SQL-запросы на уровень данных.
Для запроса типа SELECT * FROM table
, Независимо от того, делаете ли вы это методом класса самой модели или методом объекта менеджера модели, это вопрос стиля.
Но бизнес-логику следует абстрагировать от произвольных деталей схемы базы данных.Бизнес-уровень должен иметь возможность просто запрашивать у уровня данных все экземпляры модели, не заботясь о конкретном запросе, который будет использоваться для получения этих данных.
Другие советы
Я только что нашел ваш вопрос и подумал о том, чтобы высказать другую точку зрения.Вы должны в большинстве приложений (не буду говорить "в каждом", но это близко к этому) создать уровень абстракции данных, в большинстве случаев определяемый как ORM framework.
Однако будьте осторожны, уровень доступа к данным (DAL) не следует путать с Уровнем домена или уровнем бизнес-логики, в зависимости от вашего архитектурного подхода.Если вы хотите углубиться в эту тему, я думаю, что каждый разработчик должен, вы можете обратиться к Статьи Мартина Фаулера, также вы можете прочитать это запись в блоге, которую я сделал некоторое время назад, далеко не такая важная, как M.Фаулер, но я высказал кое-какие соображения по этому поводу.
С наилучшими пожеланиями, Дэвид