使用存儲庫模式操縱「複雜」對象的邏輯,前後移動... 順便說一句,我使用Laravel框架。PHP/Laravel存儲庫模式,創建「複雜」對象的正確邏輯
好吧,我在數據庫中的這些表:
- 用戶
- 公司
- company_translations
- company_contacts
- company_files
關係: - 用戶有一對一polymor與公司(我有更多類型的用戶,如管理員和客戶) - 公司有一個與company_translations一對多(公司的一些屬性可以翻譯成多種語言) - 公司有一對多與company_contacts - 公司有一個與company_files一對多
我有一個CompanyController和一個CompanyRepository。我試圖將公司創建 的所有邏輯放在CompanyRepository中,而不是使用公司其他部分(聯繫人,文件,翻譯)的回購協議。
因此,例如,當管理員創建公司時,控制器接收來自(還有一個負責驗證輸入的表單請求,典型規則)表單,其中包含關於公司的所有數據 ,翻譯,文件,聯繫人),那麼就會將數據傳遞到回購的功能,如:
$company = $this->companyRepository->create($data);
我的問題是在功能,我怎麼struture /驗證傳遞給funcion的數據?它必須在表格公司中創建一個條目,爲用戶創建一個條目,爲翻譯創建一個或多個條目,爲聯繫人創建一個或多個,爲文件創建一個或多個。
例如,從關於翻譯的要求來的輸入組織,如:
companyDescription['en']
companyDescription['es']
companyDescription['pt']
etc
回購不應該應該知道它的結構,對不對?例如:我是否在控制器內部執行此操作,例如:
$userData = [
'email' => $request->input('email'),
'password' => $request->input('password'),
etc
];
$companyData = [
'company_name' => $request->input('companyName'),
'company_slug' => $request->input('companySlug'),
etc
];
然後將這些變量傳遞給回購函數?另外一些字段不是必需的,所以並非所有的數據都是必需的,即文件不是必需的。 我如何鏈接所有必要的步驟? 或者我以完全不同的方式處理這個問題?
正確理解這一邏輯正在讓我神經緊張......所有的解決方案都是值得歡迎的。
希望我清楚地解釋了我所擁有的和問題所在。哦,我想與存儲庫模式,堅持;)
與苗條的控制器,胖模型一起去。你的控制器不應該驗證它處理的任何業務數據,這是模型的工作(無論如何,在這種情況下)。所以應該在存儲庫中處理驗證。具體的驗證應該在你需要的任何回購中進行處理,一般驗證可以由父回購處理。 – Andrew
謝謝你的建議,但我想堅持回購模式。 – Morinohtar
我想這是一個軟件工程堆棧的問題。 – schellingerht