PHP ООП: уровень бизнес-логики — уровень БД

#php #oop #design-patterns

#php #ооп #шаблоны проектирования

Вопрос:

какой может быть хороший дизайн для разделения между объектами бизнес-логики и базой данных с использованием ООП?

Комментарии:

1. Я думаю, что это больше подходит для программистов, чем SO.

Ответ №1:

Любой из них будет работать (из POEAA Фаулера):

Архитектурные шаблоны источников данных:

  • Шлюз табличных данных: объект, который действует как шлюз к таблице базы данных. Один экземпляр обрабатывает все строки в таблице.
  • Шлюз данных строки: объект, который действует как шлюз к отдельной записи в источнике данных. На строку приходится по одному экземпляру.
  • Активная запись: объект, который переносит строку в таблицу базы данных или представление, инкапсулирует доступ к базе данных и добавляет логику домена к этим данным.
  • Средство отображения данных: слой средств отображения, который перемещает данные между объектами и базой данных, сохраняя их независимыми друг от друга и от самого средства отображения.

Что выбрать, зависит от того, какой из них вы выбрали (тот же источник):

Шаблоны логики домена:

  • Сценарий транзакции: Организует бизнес-логику по процедурам, где каждая процедура обрабатывает один запрос из презентации
  • Модель предметной области: объектная модель предметной области, которая включает в себя как поведение, так и данные
  • Табличный модуль: единственный экземпляр, который обрабатывает бизнес-логику для всех строк в таблице базы данных или представлении.
  • Уровень сервиса: Определяет границу приложения со слоем сервисов, который устанавливает набор доступных операций и координирует реакцию приложения на каждую операцию.

В общем, чем больше ваши бизнес-объекты напоминают схему БД и ориентированы на операции CRUD, тем проще может быть архитектура вашего источника данных и шаблон логики Doman (хотя это и не обязательно). Если вы сталкиваетесь с большим несоответствием импеданса или с большим количеством бизнес-логики, не связанной напрямую с данными БД, тогда вы можете выбрать модель домена / Data Mapper (и также можете включать ORM).

Ответ №2:

Для этого можно использовать несколько подходов, но я хотел бы порекомендовать шаблон DataMapper в сочетании с моделями предметной области. Смотрите эту страницу для получения дополнительной информации.

Таким образом, вы отделяете доступ к вашим данным от моделей вашего домена (бизнес-логики) хорошим и простым способом. Если вы немного знакомы с ООП, модель UML на странице, указанной выше, должна прояснить способ подхода и то, как она отделяет логику базы данных от бизнес-логики.