有四个类:
StudentBase , CourseBase 和 StudentDataMapper , CourseDataMapper
Student对象可以与Course对象建立关系。一个学生可以有很多课程。许多学生可以参观一门课程。
在ER图中,学生实体有一个名为“课程”的属性,但课程对他的学生一无所知。课程没有属于“学生”的属性作为回报。
这些类中的哪一个应该执行关系的创建?
编辑:这是系统层!在业务逻辑层中,开发人员将StudentBase和CourseBase子类化,以创建Student类和Course类。创建这些类的开发人员将看不到任何代码,除了他自己的业务逻辑代码。
答案 0 :(得分:5)
都不是。
首先,ERD应该改变;你所描述的是多对多的关系(一门课程可以有很多学生和一个学生很多课程)。因此,学生不应该有课程属性,而应该有一个学生课程实体。
然后应该有一个StudentCourseDataMapper类来完成你所要求的(维护关系),StudentDataMapper和CourseDataMapper都应该知道并使用它。
答案 1 :(得分:0)
如果我理解你的问题,我不能100%确定。
例如,NHibernate(它是一个对象关系映射器)试图尽可能不影响您的业务代码。
因此,ORM不应管理您的关系。它应该在存储时使用它,并在从数据库加载时将其重新创建为其原始状态。
如果课程对学生一无所知,则无法管理这种关系。
因此,根据您对情况的描述,学生是可以管理关系的最自然的地方。
答案 2 :(得分:0)
要回答关于哪个人应该管理关系的问题,答案可能是学生,课程或两者。
您如何看待这些课程的使用?如果始终从“课程”角度使用它们,则需要添加管理关系的学生属性。相反,如果他们总是从学生的角度使用,那么显然就是它所处的位置。
然而,如果考虑到你所谈论的数据类型,它似乎是最可能的答案,那么它属于两个地方。