2016-11-14 25 views
4

使用存儲庫模式操縱「複雜」對象的邏輯,前後移動... 順便說一句,我使用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 
]; 

然後將這些變量傳遞給回購函數?另外一些字段不是必需的,所以並非所有的數據都是必需的,即文件不是必需的。 我如何鏈接所有必要的步驟? 或者我以完全不同的方式處理這個問題?

正確理解這一邏輯正在讓我神經緊張......所有的解決方案都是值得歡迎的。

希望我清楚地解釋了我所擁有的和問題所在。哦,我想與存儲庫模式,堅持;)

+0

與苗條的控制器,胖模型一起去。你的控制器不應該驗證它處理的任何業務數據,這是模型的工作(無論如何,在這種情況下)。所以應該在存儲庫中處理驗證。具體的驗證應該在你需要的任何回購中進行處理,一般驗證可以由父回購處理。 – Andrew

+0

謝謝你的建議,但我想堅持回購模式。 – Morinohtar

+0

我想這是一個軟件工程堆棧的問題。 – schellingerht

回答

0

爲了記錄在案,形式溢出這樣的:

array: [▼ 

    "active" => "1" 
    "highlighted" => "0" 
    "jobOffersApproved" => "1" 
    "trainingCoursesApproved" => "1" 
    "email" => "" 
    "password" => "" 
    "password_confirmation" => "" 
    "companyName" => "" 
    "companyDescription" => array:3 [▼ 
    "pt" => "" 
    "en" => "" 
    "es" => "" 
    ] 
    "businessSector" => "" 
    "fiscalNumber" => "" 
    "website" => "" 
    "linkedin" => "" 
    "facebook" => "" 
    "twitter" => "" 
    "googleplus" => "" 
    "country" => "" 
    "district" => "" 
    "county" => "" 
    "location" => "" 
    "address" => "" 
    "postalCode" => "" 
    "phone" => "" 
    "cellphone" => "" 
    "fax" => "" 
    "mainContact" => array:3 [▼ 
    "firstName" => "" 
    "lastName" => "" 
    "email" => "" 
    ] 
    "jobOffersContact" => array:3 [▼ 
    "firstName" => "" 
    "lastName" => "" 
    "email" => "" 
    ] 
    "trainingCoursesContact" => array:3 [▼ 
    "firstName" => "" 
    "lastName" => "" 
    "email" => "" 
    ] 
] 

「用戶」 表將收到此:

array: [▼ 
    "active" => "1" 
    "email" => "" 
    "password" => "" 
] 

「公司」表格:

array: [▼ 
    "highlighted" => "0" 
    "jobOffersApproved" => "1" 
    "trainingCoursesApproved" => "1" 
    "companyName" => "" 
    "businessSector" => "" 
    "fiscalNumber" => "" 
    "website" => "" 
    "linkedin" => "" 
    "facebook" => "" 
    "twitter" => "" 
    "googleplus" => "" 
    "country" => "" 
    "district" => "" 
    "county" => "" 
    "location" => "" 
    "address" => "" 
    "postalCode" => "" 
    "phone" => "" 
    "cellphone" => "" 
    "fax" => "" 
] 

「company_contacts」表:

每個數組條目將是表中的一行。只有「mainContact」是強制性的。

array: [▼ 
    "mainContact" => array:3 [▼ 
    "firstName" => "" 
    "lastName" => "" 
    "email" => "" 
    ] 
    "jobOffersContact" => array:3 [▼ 
    "firstName" => "" 
    "lastName" => "" 
    "email" => "" 
    ] 
    "trainingCoursesContact" => array:3 [▼ 
    "firstName" => "" 
    "lastName" => "" 
    "email" => "" 
    ] 
] 

而且,應該從表單來的一個文件,關於該公司的標誌,這不是強制性的,並且會去「company_files」表。