2

我目前有一种情况,用户能够完成一个表单,这可能会导致创建几个不同的模型。例如,他们发布了待售汽车的广告,但在此过程中,他们需要创建新品牌和新车型(因为数据库中尚不存在这些)。

目前,此表单正在“AdvertController”中处理。我现在想将我的数据库交互抽象到一个存储库中。我的问题如下...

  1. 我应该有一个用于数据库交互的存储库,还是每个模型一个?
  2. 如果每个模型一个,哪个文件(控制器或存储库)应该处理确定是否需要创建新模型的逻辑。

换句话说,以下哪个工作流程是最佳实践(如果确实如此,则两者之一)?

(假设数据库具有以下关系: Advert m-1 CarModel m-1 Brand)

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.
4

1 回答 1

1

Laravel 的伟大之处在于它可以灵活地按照您的意愿进行操作。通常没有“单一正确”的做事方式——但有很多方式。

泰勒在他的书(从学徒到工匠)中谈到了很多,基本上你应该确定哪种选择最适合你。

就个人而言,我会使用一个存储库,它处理所有逻辑,并与后端的不同模型进行交互。这是一个很好的关注点分离。

这意味着您的控制器只需要了解单个存储库,而存储库处理所有后端交互。

于 2013-09-17T17:42:26.140 回答