DDD(java)聚合根和持久性

我正在创建一个应用程序,它将使用各种大小的表格,而我已经开发了一个标记为DDD的项目,之后它没有真正使持久性部分正确,因此我还在研究事物。 我没有完全掌握并且似乎无法找到具体例子的一件事是如何坚持聚集根的“孩子”。 我工作时没有ORM(只是普通的老DAO)很难找到的例子(这实际上是针对uni的项目,这是db特定的所以我’不允许’使用ORM,而我很欣赏这简直太容易了。 我已经四处查看了stackoverflow的具体示例,但似乎没有什么能够描述我的特定问题。

我怀疑下面的代码是对的

public DataTable getTableByID(int id) throws AccessException{ DataTable result = this.context.TableContext().getEntityByID(id); result.setColumns(getColumnsByTableID(id)); return result; } private List getColumnsByTableID(int id){ Object[] arguments = { id }; return this.context.ColumnContext().getUnitsWhere("TABLE_ID = ?", arguments); } 

如您所见,每次检索表实体时都会设置columns集合,如果表已经在内存中,这显然会丢弃已添加到集合中或从集合中删除的任何列。 我不确定我应该在哪里或如何检索列(我已经考虑过从表类中调用存储库但是对此感觉不舒服)。 说到持久性,我也不完全确定如何去做,当我将对象添加到列表中时我可以很容易地检索它们但是当我删除它们时我真的没有办法检测(因为我是确保把事件赶上来这将是作弊:))。 非常感谢,向正确的方向推进一点点,谢谢。

DDD是一组与技术无关的指南。 但是,域对象长期存在的项目(即生存进程重启)需要某种基础结构来处理持久性问题,如果使用关系数据库则需要ORM。 在这种情况下,ORM是必须的,因为您需要将Domain模型尽可能地作为持久性不可知。 您不希望持久性问题在您的域模型上“流血”。 现在的问题是你是使用现有的ORM还是尝试构建自己的ORM。 无论你是否意识到这一点,看起来你都在努力建立自己的自己。 建立ORM是一项重大任务,也是自己的项目。 我不确定期望一个人在合理的时间内构建ORM和应用程序本身是多么现实。 无论如何,Martin Fowler有一组你可能想看的模式 :

对象关系行为模式:工作单元(184),身份映射(195),延迟负载(200)

对象关系结构模式:标识字段(216),外键映射(236),关联表映射(248),从属映射(262),嵌入值(268),序列化LOB(272),单表inheritance(278) ,类表inheritance(285),具体表inheritance(293),inheritance映射器(302)。

对象关系元数据映射模式:元数据映射(306),查询对象(316),存储库(322)。

针对您的具体问题,请查看Identity Map和Data Mapper 。 您还可以查看hibernate源代码的实现提示,但它可能有点压倒性。