我們有工廠來創建複雜的對象。 (對於makin的東西)PHP設計模式工廠,倉庫和...?
我們有找到它們的倉庫。 (for findin'stuff)
我們有什麼更新它們? (For changin'stuff up)
看起來像是在拼圖中缺失的一塊?我不認爲它屬於存儲庫,因爲這打破了單一的責任......
我們有工廠來創建複雜的對象。 (對於makin的東西)PHP設計模式工廠,倉庫和...?
我們有找到它們的倉庫。 (for findin'stuff)
我們有什麼更新它們? (For changin'stuff up)
看起來像是在拼圖中缺失的一塊?我不認爲它屬於存儲庫,因爲這打破了單一的責任......
更新實體(以及數據庫)屬於存儲庫。存儲庫本身是數據庫本身和程序之間的一個層。
因此,每個數據庫操作都屬於存儲庫。此外,存儲庫不能與數據庫通信,它也可以具有XML,CSV或API作爲數據源。但這並不重要,因爲您正在與存儲庫進行通信。版本庫處理之後的所有內容。
你可以用另一個更改存儲庫,你的程序可以毫無問題地工作,因爲這些存儲庫都實現了相同的接口。你不再喜歡那個MySQL數據庫,那個老式的CSV好多了?只需更換已使用的Repository即可完成。
查找存儲庫的條目不超過SELECT
語句,那麼爲什麼不用UPDATE
或DELETE
呢?
在MSDN
進一步閱讀上找到web.archive.org
不同意。如果你採用這種邏輯「每個數據庫操作因此屬於存儲庫」。你不能縮放。 – AndrewMcLagan
爲什麼你不能縮放?每個實體都有自己的存儲庫,因此您可以擴展實體數量,從而擴大您將使用的存儲庫數量。 – KhorneHoly
想一想。抽象數據庫交互不是庫的唯一原因。它們是「取物的對象」......這也是爲什麼工廠模式存在「用於創建複雜事物的對象」。他們都可以從抽象數據庫邏輯中獲益...並非如你所說的唯一原因... – AndrewMcLagan
一個很好的解釋和例子,我認爲這取決於方法。
以DDD爲例,您所說的是真實的。版本庫應該負責添加,查找和刪除,因爲它對集合起作用,但是爲什麼它應該能夠更新單個對象呢?
可以做些什麼?我想我只會複製其他人說的話,所以我只會發布鏈接回答:approach to removing save/update from repository
是不是「更新」一個對象本身執行的操作嗎?或者,您的意思是「更新」,如「將現有對象的已更改狀態保存回數據存儲區」一樣? – David
您會更新對象,然後將更新的對象傳回存儲庫;無論你的repo是在內存中還是在數據庫中,你仍然要做'$ repo-> save($ object)' – CD001
我們有存儲庫來保存對象(複雜與否) 。持久性包括查找,但也存儲(新的或更新的)對象(以後有東西可以找到)。 – axiac