1

有四个类:

StudentBase , CourseBaseStudentDataMapper , CourseDataMapper

Student 对象可以与 Course 对象有关系。一个学生可以有很多课程。一门课程可以被许多学生参观。

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

这些类中的哪一个应该执行关系的创建?

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

4

3 回答 3

5

两者都不。

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

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

于 2010-01-05T15:27:45.470 回答
0

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

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

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

如果课程对学生一无所知,它就无法管理这种关系。

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

于 2010-01-04T18:17:23.553 回答
0

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

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

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

于 2010-01-05T15:09:23.230 回答