課程類不應該負責提取參與者,實際上,它不應該負責提取課程。您提出了數據訪問層的正確點,但課程類本身不應與此層一起工作,它只能代表一門課程。
您創建了一個負責提取數據的類,即數據訪問層。你可以命名這個類似於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