我正在開發一個應用程序,需要從單個CSV文件(具有一對多關聯)導入三個模型的數據。我已經建立了一個數據文件模型&控制器來處理文件的上傳/解析。現在,解析和保存記錄的所有邏輯都在控制器中。這允許我保存到幾個不同的模型,獲取已保存記錄的ID,並在解析文件時根據需要創建關聯。MVC多模型數據導入(胖模型?)
考慮到「胖模型,瘦身控制器」的原理,我意識到我在控制器中有大約150行代碼,它實際上只是處理數據。但是,當我開始考慮將這個模型轉移到模型中時,我得出結論,我必須將所有這些數據處理成數組(不知道關聯ID),並將其發送回控制器以便保存(因爲模型不能來自其他模型的調用方法)。我預計在導入文件中有大約1,500條記錄。我正在使用CakePHP,它有一個saveAll()
方法可以將數據同時從單個數組中保存到多個模型中。
另一種選擇是讓三個模型中的每一個分別解析文件,忽略它不需要的數據。這應該是可能的,只要我以正確的順序將它發送給模型,並給「belongsTo」模型一個可能關聯的記錄列表進行搜索。
所以 - 關於這些選項的任何建議?
- 保留數據文件控制器中的解析代碼。
- 將所有解析代碼移到數據文件模型,然後通過數據文件控制器傳回要保存的大數組。
- 將文件分別發送到三個模型中的每一個,以及用於確定關聯的補充列表。
我希望客戶能夠在必要時多次執行此操作(例如,如果他們對數據文件進行更正),但這不是定期執行的操作。 – bjudson 2010-09-20 20:58:48
所以你不認爲有什麼特別的理由把所有的代碼放在模型中,而不是控制器?我按照我現在想要的方式工作,但我覺得我打破了「瘦身控制器」的原則。 – bjudson 2010-09-20 21:00:25