【问题标题】:Who should establish the relationship? The Entity or the Data Mapper?谁应该建立这种关系?实体还是数据映射器?
【发布时间】:2011-01-01 08:21:50
【问题描述】:

有四个类:

StudentBaseCourseBaseStudentDataMapperCourseDataMapper

Student 对象可以与 Course 对象建立关系。一个学生可以有很多课程。一门课程可供许多学生学习。

在 ER 图中,Student 实体有一个名为“courses”的属性,但课程对他的学生一无所知。课程没有作为回报的属性称为“学生”。

哪些类应该执行关系的创建?

编辑:这是系统层!在业务逻辑层中,开发人员将 StudentBase 和 CourseBase 子类化以创建 Student 类和 Course 类。创建这些类的开发人员将看不到任何代码,除了他自己的业务逻辑代码。

【问题讨论】:

    标签: design-patterns architecture orm datamapper


    【解决方案1】:

    两者都没有。

    首先,ERD 应该改变;您所描述的是多对多关系(一个课程可以有很多学生,一个学生可以有很多课程)。因此,学生不应该有课程属性,而是应该有一个学生课程实体。

    然后应该有一个 StudentCourseDataMapper 类来执行您的要求(维护关系),并且 StudentDataMapper 和 CourseDataMapper 都应该知道并使用它。

    【讨论】:

      【解决方案2】:

      不确定我是否理解您的问题。

      例如,NHibernate(它是一个对象关系映射器)尽量不影响您的业务代码。

      所以 ORM 不应该管理你的关系。它应该在存储时保持原样,并在从数据库加载时将其重新创建为原始状态。

      如果课程对学生一无所知,则无法管理关系。

      因此,根据您对情况的描述,学生是可以管理关系的最自然的地方。

      【讨论】:

      • 对不起,我错过了一些东西。更新。我同意你的学生假设。有道理!
      【解决方案3】:

      要回答您关于应该由哪个人管理关系的问题,答案可以是学生、课程或两者。

      您如何看待这些类的使用情况?如果它们总是从课程角度使用,那么您需要添加一个管理关系的学生属性。相反,如果它们总是从学生的角度使用,那么显然这就是它所在的地方。

      但是,如果考虑到您所讨论的数据类型,这两个似乎都是最有可能的答案,那么它属于这两个地方。

      【讨论】:

        猜你喜欢
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        相关资源
        最近更新 更多