DDD - 复杂的ORM映射

3
我正在编写一个Java DDD应用程序,其中数据库模型已经设计和实现。问题是我的领域对象与数据库模型不同,并且ORM映射过于复杂。这里的问题是:我该怎么办?使用DTO吗?如果领域对象看到存储库接口,我如何将DTO与存储库和领域对象关联起来?谢谢!

我不确定DTO在这种情况下会有什么帮助。你能举些你遇到的映射问题的例子吗?你可能会惊讶于数据库模式和领域模型可以有多么不同。也许你需要重新设计领域以适应数据库(虽然这不是通常的方式,但有时是必要的)。 - Paul T Davies
我也遇到了同样的问题,没有现有的ORM(如Hibernate)可以将我的领域对象映射到现有的遗留数据库设计中。每保存一个表单就需要插入多个表格,并更新其他一些表格的某些字段。 - Amir Pashazadeh
2个回答

1
Hibernate对于旧数据库有很好的支持,在class=table映射方面不仅如此。如果您使用额外的DTO层,所引用的复杂性不会消失,它只会分散到另一层中。将其包含在映射文件中可能更简单。如果您能看到减少整体复杂性方面的显着好处,那么弯曲模型以适应数据库模式可能是有意义的。然后随着database的变化,重新设计域模型。

1
许多ORM在实现映射能力方面存在缺陷。此外,它们引入的概念捷径可能会阻止解决方案与业务保持一致。你的情况是一个很好的例子。
对于你的情况,我可能会质疑使用ORM的必要性。我会使用POCOs、领域服务等方式实现业务模型,而不是试图重用现有的数据库模型。对于持久化,考虑到你有两个不同的模型,我会通过将领域模型注入到数据访问层中来管理代码,以防止存储模型污染你的领域,然后在DAL中使用过程化代码和微型ORM(如果存储模型复杂,则使用ORM)。这代表了更多的工作,但你将获得一个更好的领域模型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接