2 回答

TA貢獻1891條經驗 獲得超3個贊
Repository 模式完全允許對象持久化。
來自 Martin Fowler 的著作Patterns of Enterprise Application Architecture (p.322):
存儲庫在域和數據映射層之間充當中介,就像內存中的域對象集合一樣??蛻舳藢ο笠月暶鞣绞綐嫿ú樵円幏?,并將它們提交給 Repository 以獲得滿意。對象可以添加到 Repository 中,也可以從 Repository 中刪除,就像它們可以從一個簡單的對象集合中一樣,Repository 封裝的映射代碼將在幕后執行適當的操作。
摘錄很清楚:由于 Repository 是一個集合,您應該能夠隨意添加和刪除其中的對象。
我唯一關心的是你的界面。你應該把它分成兩個或更多,因為你可能會有這樣的對象:
不打算刪除
不打算更新
不打算插入
創建不同的接口將使您的代碼符合接口隔離原則,該原則規定任何客戶端都不應被迫依賴于它不使用的方法。
一些例子:
假設您有一個代表您所在國家/地區的類。很少看到一個國家頻繁地添加新州、刪除或更改其名稱。因此,該類
State
可以實現一個只有方法all()
和的接口show()
。假設您正在編寫電子商務代碼。
Customer
從數據庫中刪除 a不是一種選擇,因為他的所有數據,如購買歷史、搜索等,都會丟失。所以你會做一個軟刪除,設置一個標志$customer->deleted = true;
。在這種情況下,類Customer
可以實現只具有方法的接口all()
,并show()
與其它接口-兩個接口-在方法insert()
和update()
。

TA貢獻1789條經驗 獲得超8個贊
我想你誤解了你引用的句子:
存儲庫最重要的區別可能是它們代表實體的集合。它們不代表數據庫存儲或緩存或任何數量的技術問題。存儲庫代表集合。你如何持有這些集合只是一個實現細節。
沒有聲明說您應該只使用存儲庫進行閱讀。存儲庫最重要的特性是,當您使用存儲庫創建或更新項目時,更改可能不會立即應用于持久層。應用更改的時間取決于存儲庫的實現。
我的一個小提示,我們不應該create
在存儲庫中調用方法。作為一個集合,我們向其中添加項目,而不是創建項目。我通常有一個add
方法而不是create
我的存儲庫接口中的方法。創建應該是工廠的責任。
- 2 回答
- 0 關注
- 127 瀏覽
添加回答
舉報