2010-01-04 173 views
1

有四類:誰應該建立關係?實體或數據映射器?

StudentBaseCourseBaseStudentDataMapperCourseDataMapper

的學生對象可以有一個課程對象的關係。一個學生可以有很多課程。一門課程可以被許多學生訪問。

在ER圖中,學生實體有一個名爲「課程」的屬性,但課程對他的學生一無所知。作爲回報,課程沒有稱爲「學生」的屬性。

哪些類應該執行關係的創建?

編輯:這是系統層!在業務邏輯層中,開發人員將StudentBase和CourseBase分類爲創建一個Student類和一個課程類。創建這些類的開發人員不會看到任何代碼,除了他自己的業務邏輯代碼。

回答

5

都沒有。

首先,ERD應該改變;你所描述的是一種多對多的關係(一門課程可以讓許多學生和學生開設許多課程)。所以,學生不應該有課程屬性,相反,應該有一個學生課程實體。

然後應該有一個StudentCourseDataMapper類來完成你所要求的(維護關係),StudentDataMapper和CourseDataMapper都應該知道並使用它。

0

不是100%確定,如果我理解你的問題。例如,NHibernate(它是一個對象關係映射程序)試圖儘可能不影響您的業務代碼。

所以ORM不應該管理你的關係。它應該保存原樣,並在從數據庫加載時將其重新創建爲原始狀態。

如果課程對學生一無所知,則無法管理關係。

因此,根據您對情況的描述,學生是可以管理關係的最自然的地方。

+0

對不起,我錯過了什麼。更新。我同意你的學生假設。說得通! – openfrog 2010-01-04 18:24:59

0

要回答你關於哪個人應該管理關係的問題,答案可能是學生,課程或兩者。

您如何看待這些類正在使用?如果他們總是從課程角度使用,那麼您需要添加管理關係的學生資源。相反,如果他們總是從學生的角度來使用,那麼顯然這就是它的居住地。

但是,如果它可能是兩個這似乎最有可能的答案給予你所談論的數據類型,那麼它屬於這兩個地方。