2011-08-26 155 views
3

我正在編寫一個Java DDD應用程序,其中的數據庫模型已經設計和實現。問題是我的域對象與數據庫模型不同,ORM映射太複雜。這是一個問題:我能做些什麼? DTO?如何將DTO與存儲庫和域對象相關聯,如果他們看到存儲庫接口?DDD - 複雜的ORM映射

謝謝!

+0

我不確定DTO在這種情況下會如何提供幫助。你能否舉一些你有困難的地圖的例子嗎?您可能會驚訝於如何創建數據庫模式和域模型。也許你需要重新設計域以適應數據庫(不是我知道的常用方式,但有時它是必須的)。 –

+0

那麼我面臨同樣的問題,並且沒有現有的ORM(如HIbernate)可以將我的域對象映射到現有的遺留數據庫設計。保存每個表格會導致插入多個表格並更新其他一些表格的某些字段。 –

回答

1

Hibernate對遺留數據庫有很好的支持。它遠遠超出了class = table映射。如果您使用額外的DTO層,您所指的複雜性不會消失,它只會分佈在一層以上。將它包含在映射文件中可能會更簡單。將模型稍微彎曲到數據庫模式可能會有意義,但只有在降低總體複雜性方面您會看到顯着的優勢。然後再重構域模型,以及database

1

許多ORM缺少足夠好的映射功能。此外,他們引入了概念性快捷方式,可以防止解決方案與業務保持一致。你的情況就是一個很好的例子。

就你而言,我可能會挑戰使用ORM。我將實現業務模型,而不嘗試重複使用現有的數據庫模型,POCO,域服務......對於持久性,考慮到您有2個不同的模型,我將使用域模型的依賴注入管理代碼數據訪問層,以防止存儲模型污染您的域,然後在DAL中,使用過程代碼和微型ORM(或存儲模型複雜的ORM)實現自己的映射。它代表了更多的工作,但是你會得到更好的域名。