2013-09-17 1 views
2

В настоящее время у меня есть ситуация, когда пользователь может заполнить форму, которая может привести к созданию нескольких разных моделей. Например, они размещают рекламу автомобиля для продажи, но при этом им нужно было создать новый бренд, а также новую модель автомобиля (так как этого еще не было в базе данных).Лучшая практика абстрагирования взаимодействия с базами данных в Laravel 4

В настоящий момент эта форма рассматривается в «Рекламном контролере». Теперь я хочу абстрагировать взаимодействие с базой данных в репозитории. Мои вопросы следующие:

  1. Должен ли я иметь один репозиторий для взаимодействия с базами данных или по одному для каждой модели?
  2. Если один для каждой модели, какой файл (контроллер или репозиторий) должен обрабатывать логику, которая определяет, нужно ли создавать новую модель.

Другими словами, какой из следующих рабочих процессов является наилучшей практикой (если это действительно так)?

(Предположим, что база данных со следующими отношениями: объявления м-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. 
+0

Когда мы доберемся до контроллера, знаем ли мы, что нам нужно создать новый бренд и/или автомобиль? Или эта логика должна быть частью контроллера/repo/models/library/something else? –

+0

Да, форма предоставляет необходимую информацию для определения необходимости создания новой модели. По сути, пользователь заполняет поле «новая модель автомобиля», которое дает ему необходимые данные. –

+0

Я думаю, вы не знаете, какие обязанности контроллера. Поищи это. –

ответ

1

Самое замечательное о Laravel - это гибкость, чтобы сделать это, как вы хотите. Часто не существует «единого правильного» способа делать что-либо, но много способов.

Тейлор говорит об этом много в своей книге (From Apprentice to Artisan), где в основном вы должны определить, какой вариант лучше всего подходит для ВАС.

Лично я бы пошел с одним репозиторием, который обрабатывает всю логику и взаимодействует с различными моделями на бэкэнде. Это хорошее разделение проблем.

Это означает, что ваши контроллеры должны знать только об одном репозитории, в то время как репозиторий обрабатывает все бэкэнд-взаимодействия.

+1

Сохранение как можно большего количества логики из контроллера также позволяет использовать ту же логику для других контроллеров (возможно, интерфейс api или командной строки). –

 Смежные вопросы

  • Нет связанных вопросов^_^