2013-07-13 52 views

回答

1

讓表單知道數據庫的缺點是你會得到緊密耦合的組件 - Zend_Form和上面情況中的數據庫訪問層 - 而這兩個組件不能有任何共同之處。

想象可能發生的情況:

  • 您從一個數據庫移動數據到另一個。或者你想在它的頂部添加一個緩存層。你將不得不在整個項目中修改數據庫特定的調用。
  • 你決定單元測試你的班級。你需要在測試中維護數據庫連接(或者模擬它)。
  • 你想在另一個地方使用相同的表單類,並選擇填充不是來自數據庫的選項,而是來自ini配置文件......好吧,你明白了。

所以最好的解決方案是有一些數據庫特定的mapper類,它可以讓你得到你想要的數據。然後將這些數據作爲依賴項傳遞給表單。這樣你就可以從任何外層獲得獨立的表單(可讀可維護,可測試)。

因此,您可以創建表單的對象,將數據從數據源(不管它是什麼)傳遞到控制器中。

+0

thx答覆。如果我必須填充幾個選擇選項,並且在驗證之後也將選定的值轉換爲對象,這是否會導致非常胖的控制器?有沒有辦法將這種類型的表單前/後處理轉換爲某種類型的幫助對象? – blacktie24

+1

當然。下一步是將您的創建代碼移動到一些專用的類 - 工廠(請參見[什麼是PHP中的工廠設計模式?](http://stackoverflow.com/questions/2083424/what-is-a-factory-design- pattern-in-php)的一個很好的例子)。我想你需要一個工廠來生成一個表單和一個工廠從一個驗證過的表單生成一些結果對象,所以它可以被持久化。 –