從傳統的ER圖數據庫中心的方法來到設計應用程序,使用面向對象的方法實現類引起混淆等示於以下實施例中過渡到OOP方式
1)實施了許多類對許多關係。
假設你有兩個實體,教授和學院有如下關係(我不知道怎麼畫在SO否則我會說明的實例與圖):
- 一個教授可以在不同的學院工作以不同的能力例如講師,客座講師,實驗員,研究員等
- 一所高校可/將有許多教授在像講師,客座講師,實驗員,研究員等
不同的位置這樣做的ER方式工作,我們有這樣
CollegeTable(CollegeId,CollegeName)
表
ProfessorTable (ProfessorId,ProfessorName))
LecturerTable(LecturerId, CollegeId,ProfessorId,時序))
所以多對多關係是一個包含實體和其他關係特定數據的主鍵的表。如果我要創建類,以表示我的錶行,他們會像
class CollegeData
{
string CollegeId;
string CollegeName;
}
class ProfessorData
{
string ProfessorId;
string ProfessorName;
}
class LecturerData
{
string CollegeId;
string ProfessorId;
DateTime Timings;
}
但做同樣的OOP和映射實體類,我們將不得不爲如此如下
class College
{
string CollegeId;
string CollegeName;
}
class Professor
{
string ProfessorId;
string ProfessorName;
}
class Lecturer
{
College aCollege;
Professor aProfessor;
DateTime Timings;
}
現在正在做正確的OO方式在系統上引入了更多的負載,因爲現在我們在多對多的類中創建完整的類對象,而不是僅具有ID字段。當我們說一個講師添加/編輯頁面,我們可以編輯時間表或改變教授時,請考慮這個含義。我們不需要完整的教授或學院對象(因爲他們將有自己的主頁添加/編輯),只有他們的ID。
2)實現一對一關係的類。
上面的例子擴展,假設我們有一個院長實體與下面的約束(爲簡單起見,假設院長是不是教授)
- 一所大學可以有一個院長,一個人可以只作爲院長工作一所大學。
再次ER方式,我們將有
class DeanData
{
string DeanId;
int DeanExp;
}
class CollegeData
{
string CollegeId;
string CollegeName;
string DeanId;
}
,而這樣做的OOP方式
class Dean
{
string DeanId;
int DeanExp;
}
class College
{
string CollegeId;
string CollegeName;
Dean aDean;
}
也映射OO的問題,在關係自己的表結構表現對象數據庫時保存或加載數據。有沒有什麼辦法可以用適當的OO方式完成,但沒有「冗餘」?或者這是否是爲了做OO方式而付出的代價?