gpt4 book ai didi

java - DDD (java) 聚合根和持久性

转载 作者:行者123 更新时间:2023-11-30 07:27:50 26 4
gpt4 key购买 nike

我正在创建一个将使用各种大小的表的应用程序,而我在一个标记为 DDD 的项目上工作之前它并没有真正正确地处理持久性部分,因此我只能研究一些东西。我没有完全掌握并且似乎无法找到具体示例的一件事是如何坚持聚合根的“ child ”。我在没有 ORM(只是普通的旧 DAO)的情况下工作,这很难找到示例(这实际上是一个针对 uni 的项目,它是特定于数据库的,所以我“不允许”使用 ORM,虽然我很感激这会容易得多,我根本做不到)。我四处寻找有关 stackoverflow 的具体示例,但似乎没有什么能真正描述我的特定问题。

我怀疑下面的代码是否正确

public DataTable getTableByID(int id) throws AccessException{
DataTable result = this.context.TableContext().getEntityByID(id);
result.setColumns(getColumnsByTableID(id));
return result;
}

private List<DataColumn> getColumnsByTableID(int id){
Object[] arguments = { id };
return this.context.ColumnContext().getUnitsWhere("TABLE_ID = ?", arguments);
}

如您所见,我每次检索表实体时都会设置列集合,如果表已在内存中,这显然会丢弃已添加到集合中或从集合中删除的任何列。我不太确定我应该在哪里或如何检索列(我考虑过从表类中调用存储库,但感觉有些不对劲)。当谈到持久性时,我也不太确定如何去做,当我将对象添加到列表中时,我可以轻松地检索它们,但是当我删除它们时,我真的没有办法检测(因为我确保让事件捕捉到这个是作弊 :))。将不胜感激朝着正确的方向努力,谢谢。

最佳答案

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

Object-Relational Behavioral Patterns: Unit of Work (184), Identity Map (195), Lazy Load (200)

Object-Relational Structural Patterns: Identity Field (216), Foreign Key Mapping (236), Association Table Mapping (248), Dependent Mapping (262), Embedded Value (268), Serialized LOB (272), Single Table Inheritance (278), Class Table Inheritance (285), Concrete Table Inheritance (293), Inheritance Mappers (302).

Object-Relational Metadata Mapping Patterns: Metadata Mapping (306), Query Object (316), Repository (322).

具体问题看Identity MapData Mapper .您还可以查看 hibernate 源代码以获取实现提示,但这可能有点让人不知所措。

关于java - DDD (java) 聚合根和持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com