课程类不应该负责提取参与者,实际上,它不应该负责提取课程。您提出了数据访问层的正确点,但课程类本身不应与此层一起工作,它只能代表一门课程。
您创建了一个负责提取数据的类,即数据访问层。你可以命名这个类似于CourseDao的东西,但重要的部分是;它只是从数据库获取数据,并以课程形式将其返回给客户端。 该类具有创建,读取,更新和删除等方法。
现在,您想为参与者做同样的事情,只需要一个小小的差异。由于您的Participant表具有课程的外键,因此您的ParticipantDao将具有超载的Read。
例子:
public class ParticipantDao{
public void create(Participant participant){
//Insert participant in db
}
public Participant read(int id){
//read participant from db
}
public List<Participant> read(){
//read all participants from db
}
public List<Participant> read(Course course){
//read all participants in this course from the db
}
public void Update(Participant participant){
//update and so on.
}
}
而且你CourseDao可以去像使用ParticipantDao:
foreach(Course course in read()){
course.setParticipants(this.participantDao.read(course));
}
总之,你有一个对象来访问数据库中的数据,这是不表示所述数据的相同对象。当你有一对多关系时,这些访问对象可以一起工作来检索正确的数据。
你可能想看看http://programmers.stackexchange.com这是很大的设计讨论。 –
感谢您的输入! – Fred
@ChrisWohlert在引用其他网站时,指出[交叉发布被皱起了眉头](http://meta.stackexchange.com/tags/cross-posting/info)通常很有帮助 – gnat