2009-04-16 36 views
12

我正在寫一個蛋糕成分,它似乎很有道理,我用它來儲存數據,而不是在控制器這樣做。它在手冊中說,在組件中使用模型是不鼓勵的,但另一種做法意味着我會在控制器中重複代碼。最佳實踐來保存數據,使用模型組件

組分基本上分析來自各種來源的數據的負載,然後將插入了各種型號的數據。

回答

24

如果組件分析來自各種來源的數據負載,則可能將其編寫爲行爲。

如果沒有,你有沒有其他選擇,但在你的組件使用的模式,一定要正確地做到這一點:

$this->ModelName = ClassRegistry::init('ModelName'); 

我個人沒有看到這個問題,因爲核心組件(如Acl組件)可以做到這一點。只要你的組件處理應用邏輯和模型處理數據,你會就好了。

+1

+1 for *組件分析來自各種源的數據負載,它可能可以寫爲行爲* – Ish 2011-07-05 14:02:00

3

在我看來,DRY是關鍵路徑。爲此,我看到兩個選項:

  1. 不是將數據保存在組件中,而是以可從控制器保存的原始形式返回給控制器。
  2. 繼續並將模型導入組件,並執行您需要執行的操作。它沒有被鼓勵,但它們確實使它變得相當容易。

如果出現一個艱難的選擇,我會在保持應用程序乾爽的一面而不是維護嚴格的MVC規範。

0

有人可能會說,如果你想要寫在一個組件生成的數據和有包裝的組件進行分發在您的組件加載模型(尤其是如果模型是組件的一部分的能力,這將使意義)。

比如我有一個authorize.net AIM(信用卡授權)的組成部分。

從我的控制器中,我打電話給元件充電功能。 Authorize.net向我發送一個響應(在組件內),根據DRY,我希望將數據保存在組件中,這樣我就不必重複保存來自任何調用函數的數據。

偏離常規的另一個優點是,我可以使用組件內的模型,而不必在應用中使用模型。

您認爲如何?

0

隨着我所熟悉的(1.3,2.0)蛋糕的版本,你可以從另一個控制器requestAction。這顯然也是不好的做法,但他們提供功能的原因很明顯。我曾在某些情況下使用過這個功能,但當我試圖來回傳遞數據時,我得到了一些粗略的結果。除了簡單的功能外,我還會避免使用這種方法。

+0

使用請求操作非常慢。這對性能來說會非常糟糕,因爲Cake會首先將整個控制器及其所有模型加載到內存中。 – Ryan 2013-05-30 08:33:12