背景:帶DAO/VO的MVC - 控制器應與哪個DAO對話?
我有我希望有人也許能夠解決設計模式問題。我用PHP編程,但我相信DAO/VO在Java中很流行。
我一直在使用MVC很多年了。我設計了一個MVC購物,但是使用了程序編程。因此,最近我決定再次使用面向對象來開發購物車。
問題:
我面臨的問題是,我的產品類沒有意義的,有RetrieveAll()方法。 例如如果我列出了10個產品,那麼我將從哪個實例調用RetrieveAll()方法?我會有10個選擇。
解決方案:
因此,我發現DAO/VO圖案。 除非我沒有足夠的研究這種模式 - 我相信每個數據庫表必須有一個模型+ DAO。沒有模型或DAO應該知道另一組模型或DAO。因此被封裝。 該模式非常有意義,將數據庫層拉離模型。
但是,在購物車中,我的產品被分配了類別。 一個類別可以是電子,服裝等
有3個表: - 類別(PID,名稱) - 類別項目(IID,名) - 類別鏈接(PID,IID)
從MVC方法來看,它沒有意識到控制器應該與哪個DAO交談?
它應該是:
- 控制器會談所有3個DAO的,然後將合適的數據結構返回查看?
- 或者DAO應該與另一個(以某種方式)對話並將單個結構返回給Controller?
Please see here for example (image)
我覺得您服務時,考慮encompases域行動這不適合自然地在域對象中。我不認爲域服務應該返回數據,他們可能但這不是他們的目的。這是版本庫的處理數據庫訪問的責任 – MikeSW 2012-02-25 15:58:04
@MikeSW是的,你可能是對的。但問題並不在於DDD,我只是將DDD的設計模式(服務)帶入問題的背景中。如果你想去適當的DDD,那麼存儲庫不應該知道任何有關數據庫的信息,並且應該使用DAO來訪問存儲。我還聽說某個地方最好不要將存儲庫,DOA等暴露給控制器,而是隻公開服務層,因此控制器使用不同的服務在域中創建/編輯/操縱/查找數據,並在轉用儲存庫,工廠等。 – 2012-02-25 16:05:06
我有點不同意這裏。只有存儲庫應該以任何形式瞭解數據庫。關於服務,我認爲這些應用服務是應用服務,但在這種情況下,它們只是一個補充層,我的意思是我不認爲它們在這裏增加任何價值,所以控制器也執行應用服務的角色。 – MikeSW 2012-02-25 16:21:34