代码之家  ›  专栏  ›  技术社区  ›  user652649

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

  •  0
  • user652649  · 技术社区  · 10 年前

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   Rafał Łużyński    10 年前

    看起来您只是为了查询目的创建了新的聚合根,如果您想使用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专家,所以可能有其他方法可以做到这一点。