我正在编写一个Java DDD应用程序,其中数据库模型已经设计和实现。问题是我的领域对象与数据库模型不同,并且ORM映射过于复杂。这里的问题是:我该怎么办?使用DTO吗?如果领域对象看到存储库接口,我如何将DTO与存储库和领域对象关联起来?谢谢!
Hibernate对于旧数据库有很好的支持,在class=table映射方面不仅如此。如果您使用额外的DTO层,所引用的复杂性不会消失,它只会分散到另一层中。将其包含在映射文件中可能更简单。如果您能看到减少整体复杂性方面的显着好处,那么弯曲模型以适应数据库模式可能是有意义的。然后随着database的变化,重新设计域模型。
许多ORM在实现映射能力方面存在缺陷。此外,它们引入的概念捷径可能会阻止解决方案与业务保持一致。你的情况是一个很好的例子。对于你的情况,我可能会质疑使用ORM的必要性。我会使用POCOs、领域服务等方式实现业务模型,而不是试图重用现有的数据库模型。对于持久化,考虑到你有两个不同的模型,我会通过将领域模型注入到数据访问层中来管理代码,以防止存储模型污染你的领域,然后在DAL中使用过程化代码和微型ORM(如果存储模型复杂,则使用ORM)。这代表了更多的工作,但你将获得一个更好的领域模型。