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

时间:2014-08-20 05:52:34

标签: php oop datamapper

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

1 个答案:

答案 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专家,所以可能有其他方法可以做到这一点。