2011-05-23 111 views
0

我有一系列複雜的選擇查詢,我需要從應用程序的不同部分調用。我想我應該將他們全部組成一個模型班,但想驗證這一點。我應該將此作爲模型嗎?

查詢全部工作在同一組5個表中。每個表都有自己的表格數據網關類和行數據網關類,但我的新查詢類不會實現任何這樣的模式(因爲它不包裝表或行)。我的新班級將調用已建立的表格和行數據網關。

此外,來自用戶的值不能直接代表查詢,因此我打算在新類中進行一些預處理。此預處理包括訪問數據庫以查找值等。

這聽起來不公平嗎?我認爲應該如何使用模型,但是對於這些事情我可能會有驚人的錯誤,所以我會感謝任何意見或建議。 (僅供參考,我正在使用Zend Framework)。

+0

是的,這屬於模型中的持久層。除此之外,在不知道新班級正在做什麼的情況下,無需多說。 – Gordon 2011-05-23 13:41:33

回答

3

查詢不在模型部分。它們是持久性相關的(模型不處理持久性)。

這些複雜的查詢應該在Persistence層中,這裏是Table Data Gateway類。

我會命名錶數據網關類「DAO」(數據訪問對象)。一個表數據網關是一種DAO,因爲你可以有一個DAO,可以幫助你從文件,web服務中獲取...

所以你可以保留你的實際類,並添加一個DAO來管理這些複雜的查詢。 此DAO不提供您訪問特定的數據庫表,但它仍然允許您訪問數據源(由多個數據庫表組成)。

編輯:

我建議你創建一個DAOinterface(可能爲空)。你的數據庫表將實現這個接口。您的新班級也將實施此界面,但不會擴展Zend_Db_Table

總之,您正在重新定義/重命名您的持久層,從「Zend DB表」到「DAO」(這使得它更通用)。 Zend Db Table是DAO的種類

+0

+1很好的解釋,這也是我的工作方式。 – martynthewolf 2011-05-23 13:57:31

+0

持久層是模型中的一個層(其中有很多)。 – Gordon 2011-05-23 14:21:09

+0

當我使用「模型」一詞時,我正在談論「域模型」。持久性確實在「模型」中,但隨着OP詢問「我是否應該將其作爲模型?」,我只使用相同的名稱(他使用「模型」來區分他的Table Data Gateway類)。 – 2011-05-23 16:01:38

相關問題