【问题标题】:how should a data mapper mapping relationships between 2+ dbms tables work?2+ dbms 表之间的数据映射器映射关系应该如何工作?
【发布时间】:2014-10-13 09:21:11
【问题描述】:

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

【问题讨论】:

    标签: php oop datamapper


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 2012-11-23
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多