8

我在設計我的應用程序,並且使用了Doctrine 2和Zend Framework。使用Doctrine 2和存儲庫,服務層的目的是什麼?

目前,我已經寫了所有的實體,我將開始編寫存儲庫,而且我關於服務,我想知道我的服務層是否不會重複存儲庫。

當我使用Doctrine 2知識庫時,是否值得編寫一個服務層?

但是,我在這裏和那裏讀到一個服務層可以用來做緩存例如。

你有沒有實現的例子?

+0

你還需要在服務層的更多信息? – Cobby 2011-05-04 02:36:10

回答

10

存儲庫和服務之間的區別在於,我讓我的服務接受數據數組以更新,創建等。IIRC,真正的存儲庫應該只處理域對象。例如,您可以做的另一件事是使用您的服務層來處理產品縮略圖的生成,配置文件圖片或緩存等。關鍵是服務與處理Doctrine實體並不嚴格相關。

我仍然使用自定義存儲庫作爲所有我的自定義查詢的容器,而不是;這會在我的服務課程中消耗,偶爾會直接在我的控制器中消耗。儘管我使用我的服務進行序列化(用於JSON響應)。

還有一個小小的灰色地帶,應該在哪裏,你只需要感受一下。在一天結束時:如果你離開了服務層並把這個邏輯放到你的倉庫中,那麼維護和可擴展性方面的工作就不會那麼多了,對於階級責任的定義就更少了。

+5

這是非常多的。通常情況下,您可以將任何自定義DQL查詢作爲方法放入存儲庫中。然後,將任何其他邏輯放入服務中。通常情況下,您將投入服務的內容寫入ZF的控制器操作中,因此實際上取決於您是否需要分離。特別有用。如果你發現自己在你的控制器中重複了邏輯 - 那麼它常常是需要爲它服務的標誌。 – 2011-04-30 22:16:01

+1

好的,謝謝你的回答,錯誤處理怎麼辦,我們應該在這樣的體系結構中處理異常? – JohnT 2011-05-04 11:55:53

+0

'問題是,他們實際上嚴格地與使用學說相關'什麼是嚴格的?庫? – 2012-03-17 06:36:29