数据映射器如何映射2+ DBMS表之间的关系?


how should a data mapper mapping relationships between 2+ dbms tables work?

我有两个数据域,StudentCourse,以及相关的数据映射器,StudentMapperMySQLCourseMapperMySQL。现在我想实现第三个数据映射器,用于获取这两个数据,特别是为了利用SQL JOIN (SELECT ... FROM students JOIN courses ON .... WHERE ...)。select()/fetch()方法应该返回什么?它应该如何通过存储库模式实现工作?

看起来您正在为查询目的创建新的聚合根,如果您想使用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

这里重要的是您有不同的命令和查询模型,因此您可以在您的系统中有两个不同的Course模型实体。Course在命令模型中可能是聚合根,而在查询模型中则不是。

我想这个答案可能有点难以理解,但我尽力了。无论如何,我不是DDD专家,所以可能有其他方法可以做到这一点。