我正在尝试不费吹灰之力地实现完全有效的持久性无知。不过我有很多问题:
最简单的选择
这真的很简单——可以像在 SOA 中那样使用 Spring Data 注释对实体进行注释(但让它们真正执行逻辑)?除了必须在实体中使用持久性注释之外还有什么后果,这并不真正遵循 PI 原则?我的意思是 Spring Data 真的是这样 - 它提供了很好的存储库,可以完成 DDD 中的存储库应该做的事情。问题在于实体本身......
更难的选择
为了使实体不知道它所操作的数据来自何处,很自然地通过构造函数将该数据作为接口注入。另一个优点是我们总是可以执行延迟加载——例如,我们在 Neo4j 图形数据库中默认拥有。缺点是聚合(由实体组成)将完全了解所有数据,即使它们不使用它们 - 由于数据完全暴露,可能会导致调试困难(DAO 将像聚合一样是分层的)。这也将迫使我们为存储库使用一些适配器,因为它们不再存储真实的实体......而且任何翻译都很丑陋......另一件事是我们无法在没有这样的 DAO 的情况下实例化实体 - 尽管可能存在-域中的内存实现......再次,更多层。
最难的选择
实体可以包裹在一个决定数据应该来自哪里的延迟加载器上。它可以是内存中的,也可以是数据库中的,它可以处理任何需要事务的操作等等。虽然是复杂的层,但在某种程度上可能是通用的......?在这里阅读
你知道其他解决方案吗?或者,也许我在提到的那些中遗漏了一些东西。请分享你的想法!