2010-10-12 63 views
4

大家好 我試圖建立一個使用DDD方法的解決方案。我創建了一組實體,以及一些用於從實體中刪除數據持久性依賴項的數據源。 它是正確的我,使用DataMapper的像「取景器」類,我有這樣域驅動的設計模式澄清

getById() getUsersByRanking() getByLastName()方法

還是應該DataMapper的不包含專門的查找方法並只使用getById()?

對於我來說,假設存儲庫模式用於刪除已添加到數據映射器的那些「專用」查找程序方法,而是向客戶端提供查詢語言,而不是通過查找實體除ID之外的其他手段是什麼?

我真的希望有人能幫助我澄清這些模式如何與其他域模型,Datamapper,Data presistence,Repository進行交互。

香港專業教育學院讀的Martin Fowler的POEAA很多,但有一個很難連接點:)

+0

您使用哪種語言?你也映射了什麼(SQL DB,Object DB,內存DB,面向文檔DB等)的類型? – WeNeedAnswers 2010-10-12 17:42:54

+0

不管模式具有相同的含義,無論使用哪種語言/數據持久性?但目前我試圖使用關係數據庫(MySQL)將其實現到PHP應用程序中。 – 2010-10-12 18:11:05

+0

對於不同的供應商來說,每個人都有自己的看法,在域名的去向。域的東西可以在Sql數據庫或你的php中實現。我幾乎不瞭解php,它是否支持完整的N層設計?如果您使用N層設計對您的應用程序進行建模和設計,那麼這些部分可以更容易地融合在一起。例如,數據庫隱藏在Repository Class後面,DataMapper將數據庫映射到您使用PHP編寫的Domain Model。然後,應用程序中的所有交互都將通過Repository Class完成。 – WeNeedAnswers 2010-10-12 20:59:32

回答

0

讓的坐在那respositories是在DDD實體切入點。你可以創建一個抽象的,然後專門化它到每個實體。因此,每次需要獲取實體時都可以詢問存儲庫。數據映射器是一種將實體與其數據庫表示或任何其他存儲映射的解決方案。所以我猜數據映射器必須隱藏在存儲庫模式後面。

+0

正如我在上面的評論中談到了WeNeedAnswers,我的問題是,在我的數據映射器周圍添加Repository抽象的時間之間的區別很難看出,我在網上看到的很多示例看起來像他們正在使用datamapper和存儲庫交替,很多人都在談論Repository正在爲你的域對象添加一個類似於接口的集合,但是當我看到它時,這就是數據映射器所做的事情。 – 2010-10-16 08:02:06

+0

@madsleejensen你不應該互換倉庫和DM'因爲至少DM不是DDD的概念。正如WeNeedAnswers寫道:「數據映射器的責任是將這些數據放入並映射到您的存儲庫對象中」。因此,您可以將DM視爲Repository概念背後的具體機制。 – Arseny 2010-10-18 09:53:22