2015-11-16 67 views
0

我有一個簡單的用例,用戶可以discard a profile。這很容易理解,但提出了一些建模問題。DDD,移動到垃圾桶,如何設計它

1 /是否可以在我的profile實體中有一個標記來表明他在垃圾箱中?

我不這麼認爲。所以我想有兩個ProfileRepositoryTrashRepository

2 /因此,鑑於這兩個存儲庫,在我的應用程序服務中,我只需從他的存儲庫中刪除配置文件並將其添加到垃圾箱。看起來很自然,但如果我不能進行交易,會造成麻煩。 (但在我的應用程序中並非如此)。

但是,我使用的是關係數據庫,第一個想法是使用列來指示該行是否在垃圾桶中,並讓這兩個存儲庫在同一張表上工作。我不確定這是個好主意。

我也可以將discard方法添加到ProfileRepository,這樣我就不需要這兩個。

哪一個是最好的解決方案? 我可以設置一個標誌來確定我的實體中的狀態(丟棄),還是讓兩個不同的實體具有不同的存儲庫更好?

+0

您爲什麼要反對在'Profile'了'discard'標誌? –

+0

因爲我認爲這不是「真實生活」的一部分,但經過一些討論和反思之後,我認爲我錯了。事實上,「丟棄」比「刪除」或「主動」更可接受。 –

回答

4

丟棄真的是一個商業命令,一個命令總是會改變域的狀態。我相信有一個狀態表明配置文件已被丟棄是完全有效的。如果你真正的意思是discarded,那麼引入一個物業如deleted or active會是個錯誤。

但是,有些人認爲,明確地模擬狀態有時是有用的:有一個完全不同的類來表示丟棄的配置文件。

這裏涉及到明確的狀態建模幾個環節:

http://codebetter.com/gregyoung/2010/03/09/state-pattern-misuse/ http://p2p.wrox.com/book-patterns-principles-practices-domain-driven-design/94718-ch16-explicit-state-modeling-identity-map.html https://medium.com/@martinezdelariva/explicit-state-modeling-f6e534c33508

+0

擁有完全不同的課程正在成爲我的最愛解決方案的一部分。但是,那麼我可能需要創建一個'ProfileRespository'來處理'Profile's和'TrashRepository'處理'DiscaredProfile''或者只有一個有兩個'oodard'和'recover'的操作? –

+0

@Anonymous你會有兩個不同的倉庫國際海事組織。如果你繞過你的域名模型進行查詢(就像我認爲的那樣),將任何狀態的配置文件列在一起不應該更難。但是,如果你不這樣做,那麼你需要與很多不太感興趣的存儲庫進行交互。我不確定的一件事是,如果您可以輕鬆地將所有狀態存儲在同一個數據庫表中。我還沒有檢查過像Hibernate這樣的ORM如何處理這個問題。 – plalx