В настоящее время у меня есть ситуация, когда пользователь может заполнить форму, которая может привести к созданию нескольких разных моделей. Например, они размещают рекламу автомобиля для продажи, но при этом им нужно было создать новый бренд, а также новую модель автомобиля (так как этого еще не было в базе данных).Лучшая практика абстрагирования взаимодействия с базами данных в Laravel 4
В настоящий момент эта форма рассматривается в «Рекламном контролере». Теперь я хочу абстрагировать взаимодействие с базой данных в репозитории. Мои вопросы следующие:
- Должен ли я иметь один репозиторий для взаимодействия с базами данных или по одному для каждой модели?
- Если один для каждой модели, какой файл (контроллер или репозиторий) должен обрабатывать логику, которая определяет, нужно ли создавать новую модель.
Другими словами, какой из следующих рабочих процессов является наилучшей практикой (если это действительно так)?
(Предположим, что база данных со следующими отношениями: объявления м-1 CarModel м-1 Марка)
Form completed -> Advert Controller
AdvertController -> tells CarModel repository to create new CarModel model
CarModel_Respository -> creates new CarModel
AdvertController -> sets CarModel relationship with the newly created brand
AdvertController -> tells Brand repository to create new CarModel model
Brand_Respository -> creates new Brand
AdvertController -> tells Advert repository to create new Advert model
Advert_Repository -> creates new Advert
AdvertController -> sets Advert relationship with CarModel
AdvertController -> displays success message
ИЛИ ... что-то вроде этого ...
Form completed -> AdvertController.
AdvertController -> sends data to DatabaseRepository
DatabaseRepository -> creates new Brand model
DatabaseRepository -> creates new CarModel model
DatabaseRepository -> sets CarModel brand_id as the newly created brand
DatabaseRepository -> creates new Advert model
DatabaseRepository -> sets Advert car_model_id as newly created CarModel
DatabaseRepository -> Sends success message to AdvertController
AdvertController -> sends success message to user.
Когда мы доберемся до контроллера, знаем ли мы, что нам нужно создать новый бренд и/или автомобиль? Или эта логика должна быть частью контроллера/repo/models/library/something else? –
Да, форма предоставляет необходимую информацию для определения необходимости создания новой модели. По сути, пользователь заполняет поле «новая модель автомобиля», которое дает ему необходимые данные. –
Я думаю, вы не знаете, какие обязанности контроллера. Поищи это. –