我有两个数据域,Student
和Course
,以及相对数据映射器,StudentMapperMySQL
和CourseMapperMySQL
。现在我想实现第三个数据映射器来获取两个数据,特别是为了利用SQL JOIN(SELECT ... FROM students JOIN courses ON .... WHERE ...
)。 select()/ fetch()方法应该返回什么?以及如何通过存储库模式实现它?
答案 0 :(得分:1)
看起来您只是出于查询目的而创建新的聚合根,如果您想使用CQRS,这完全没问题。
每个AR都应该拥有自己的存储库,因此您应该创建AR StudentCourses和StudentCoursesRepository(来自您的无处不在的语言)。
您应该调用该存储库以获取学生课程数据repo.getCoursesForStudent(student_id)
或一次性repo.getStudentsWithCourses()
。
存储库应仅返回聚合根,因此作为回报,您将获得聚合根或它们的列表。
这样的AR看起来像那样:
class StudentCourses:
studentName Name (VO)
studentId AggregateId (VO)
courseList Course[0..*] (Entity)
class Course:
your course data
这里重要的是您有不同的命令和查询模型,因此您可以在系统中拥有两个不同的课程模型实体。命令模型课程可能是聚合根,而在查询模型中则不是。
我认为这个答案可能有点难以理解,但我尽了最大努力。无论如何,我不是DDD专家,所以可能有其他方法可以做到这一点。