2011-08-26 131 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)实现自己的映射。它代表了更多的工作,但是你会得到更好的域名。