Замена репозиториев в проекте Symfony, настроенном с DBAL

1

Я работаю над проектом в Symfony 3.0.1, который использует пять баз данных с DBAL в качестве уровня доступа к данным. Я всегда работал в Symfony с ORM, и я всегда использовал следующую модель MVC:

Доступ к данным:

CONTROLLER → REPOSITORY (запросы идут здесь) → ENTITY

Показать результаты:

CONTROLLER → render ($ view, $ params) → VIEW

Эта модель позволяет использовать короткие и простые контроллеры, но теперь я использую DBAL, поэтому я не могу использовать репозитории.

Вопрос в том:

Как я могу достичь аналогичной модели с помощью DBAL? В других словах: Где я должен поставить запросы?

Должен ли я использовать службы вместо хранилищ?

Примечание. Я использую только оператор select в этих базах данных.

Заранее спасибо!

Теги:
model-view-controller
dbal

1 ответ

2
Лучший ответ

Для использования объектов вам не требуется ORM.
Аналогично, вам не нужна Doctrine, чтобы иметь возможность создавать репозитории, когда репозиторий представляет собой реализацию шаблона проектирования:

вместилище

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

Даже если вы не можете использовать Doctrine ORM, вы все еще можете создавать классы POPO против абстрактного модельного класса и/или интерфейса модели.
Вы можете ввести объект DBAL Connection для каждой модели/объекта с помощью метода построения или сеттера. После создания классов репо легко. Возвращение объектов коллекций, увлажняющих предметов или использование необработанных массивов зависит от вас.

Редактировать # 1

Я добавил настоящий образ жизни, который я использовал в прошлом (несколько лет назад), посмотрите:

https://github.com/felipsmartins/misc-and-code-snippets/tree/master/php/model-exemple/src/AppBundle/Model

Редактировать # 2

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

  • 0
    Спасибо за Ваш ответ. Это неправильно, если я помещаю запросы в сервисы Symfony?
  • 0
    @ EmilianoSangoi Нет, не совсем! Однако было бы гораздо лучше, если бы специальные службы работали вместе внутри службы, которая координирует всю транзакцию, в этом случае это было бы то, что мы знаем по единице работы (см. Шаблон единицы работы )
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню