我目前的情况是用户能够完成一个表格,这可能会导致创建几个不同的模型。例如,他们发布了一个待售汽车的广告,但在这样做时,他们需要创建一个新品牌以及一个新的汽车模型(因为这些尚未存在于数据库中)。
目前,此表单正在“AdvertController”中处理。我现在想要将我的数据库交互抽象到一个存储库中。我的问题如下......
换句话说,以下哪种工作流程是最佳实践(如果确实如此)?
(假设数据库具有以下关系:广告m-1 CarModel m-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 :(得分:1)
Laravel的伟大之处在于可以灵活地实现您的需求。通常没有“单一正确”的方式来做事 - 但有很多方法。
Taylor在他的书(From Apprentice to Artisan)中谈到了这个问题,基本上你应该确定哪个选项最适合你。
就个人而言,我会选择一个处理所有逻辑的存储库,并与后端的不同模型进行交互。这是一个很好的分离问题。
这意味着您的控制器只需要知道单个存储库,而存储库处理所有后端交互。