gpt4 book ai didi

java - 如何建模两个聚合根之间的关系

转载 作者:行者123 更新时间:2023-11-29 03:49:42 25 4
gpt4 key购买 nike

我有一个名为 Question 的类和另一个名为 StudentDriver 的类。 StudentDriver 有一个问题列表。由于这两个类都是聚合根,因此它们有自己的存储库。

当我要添加一个新问题时,StudentDriver 类是否应该有一个名为 addQuestion() 的方法? 我是否会通过 studentdriver 存储库合并 studentdriver 对象,或者我会在问题存储库中坚持这个问题吗?如果我将它与问题存储库一起保存,那么属于学生驱动程序的问题列表将不会包含新添加的问题,直到我从数据库中刷新它。

我不明白这两个聚合根对象之间的联系以及我将如何正确建模。

我正在使用 JPA。

最佳答案

看起来你有两个选择:

1) 两个聚合根。添加新问题如下所示:

StudentDriver student = studentsRepository.findById(id);
Question question = someFactory.CreateForStudent(student);
questionsRepository.Persist(question);

获取学生的所有问题将是问题存储库的责任:

IList<Question> studentQuestions = questionsRepository.findByStudent(student);

从本质上讲,从问题到学生,您有一个持久的单向关系:问题属于学生驱动程序(多对一)。

2) 一个聚合根。 StudentDriver 是包含问题列表的聚合的根。添加新问题如下所示:

StudentDriver student = studentsRepository.findById(id);
student.addNewQuestion("Should you stop on a red light?", "Yes");
studentsRepository.Persist(student);

要获取学生的所有问题,您可以使用类似的东西:

IList<Question> studentQuestions = student.GetAllQuestions();

两个选项之间的选择取决于 OP 中缺少的信息。识别聚合根的好方法是查看生命周期逻辑。类似

的问题
  • Question 可以没有相应的 Student 吗?
  • 能否将问题从一名学生“重新分配”给另一名学生?
  • 当您删除/归档学生时,是否也应删除所有问题?

关于java - 如何建模两个聚合根之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384698/

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