2010-06-01 93 views
2

我有點困惑,我正在開發一個程序,程序由兩部分組成,服務器和客戶端,有組,地點,消息...存儲在服務器,客戶端必須連接它。我設計了用例圖,活動圖,並且我也設計了類圖。UML類圖與ER數據庫圖

事情是我想在一個mysql表中實現服務器,用於存儲用戶,組......地點......用戶......所以我設計了一個包含6個表的ER圖,但是問題是我認爲我的類圖和我的ER圖看起來太相似了,我的意思是,我認爲我沒有做正確的事情,因爲我實際上對每個表都有一個類,並且當我必須提取所有用戶時系統,我必須首先將所有行轉換爲對象,並在數據庫中爲每個修改的對象寫入數據?

對我來說,最簡單的選擇是將我的整個應用程序只存儲在數據庫中,然後創建一個類來提取和插入數據,但是我必須遵循UML規範,我有點困惑用類圖來做,因爲我讀過的書說我必須爲我的程序的每個「實體」創建一個類。

對不起,我的英語不好。

謝謝。

+0

「我設計了一個由6個表格組成的E-R圖表」 - > ER圖表不包含「表格」,而是「實體」。您似乎已經定義了一張顯示數據庫模式(表,鍵)的圖表 – 2010-06-02 03:34:35

回答

2

我前幾次已經解決了這個問題,我已經以這種方式解決了這個問題:

1。)選擇(繼承自Vector,它存儲所有具有標準類的行,具體取決於您所使用的語言)結構:

ID(和用於識別您的選擇的ID) (Select,這是您的Vector類的孩子是行)

ROWNUMBER:整數

得到columnnumber:整數

usedFilter:字符串

usedGroupBy:字符串

usedHavingCaluse:字符串

usedOrderBy:字符串

TABLENAME:字符串

的getID()

getRowNumber():整數

getColumnNumber():整數

getUsedFilter():字符串

getUsedGroupBy():字符串

getUsedHavingClause():字符串

getUsedOrderBy():字符串

getTableName時():字符串

選擇(表名:字符串;過濾器:字符串,GROUPBY :String,havingCaluse:String,orderBy:String,columns:Vector)

2.)我有一個與數據庫直接通信的類,我們稱之爲DataAc cessLayer。讓我們來看看這個類的結構:

DataAccessLayer

連接(...):布爾

斷開(...):布爾

使用(的databaseName:字符串):布爾

selectedData:矢量(其實這是一組選擇的)的

createSelect(表名:字符串,過濾器:字符串,GROUPBY:字符串, havingCaluse:字符串,排序依據:字符串,列:向量):布爾(以確定它是否成功)

deleteSelect(ID):布爾

插入(表名:字符串,列:矢量,值:矢量):布爾型

更新(表名:字符串,columnsToSet:矢量,值:矢量,過濾器: 字符串):布爾

刪除(表名:字符串,過濾器:字符串):INT(有多少行被刪除,-1如果 異常發生,或只是簡單地拋出異常到更高的水平)

//創建/刪除表/視圖/數據庫/約束也可以實現,我只是//懶惰,因爲我你確定你已經理解了這個想法

DataAccessLayer()

發生前兩個步驟後,您可以處理任何具有兩個類的數據庫查詢(事實上,Select的功能也可以放入DataAccessLayer中,使兩個類中的一個類可用,但這樣更優雅),但是,你可能想爲一些表格處理一些額外的東西。這個解決方案很簡單,只要你發現一個表很難使用,你只需要從DataAccessLayer繼承並重新定義你想重新定義的內容,所以在DataAccessLayer中你只能使用protected和public修飾符而忘記private修飾符。因此,關係將是:

選擇1 < - >ñDataAccessLayer

ClassInheritedFromDataAccessLayer延伸DataAccessLayer

前端使用ClassInheritedFromDataAccessLayer1,...,ClassInheritedFromDataAccessLayern,DataAccessLayer。

這樣你的項目將是: - 可管理 - 訂購 - 易於規劃 - 容易實現 - 易於修改 - 由其他人

我希望這有助於

容易理解

此致敬禮。