[英]Understanding how to model UML Class/Database
我對設計一個與數據庫集成的客戶端軟件感到困惑,該軟件應該是 class 的成員變量,或者只是對數據庫的查詢。 讓我用一個簡單的例子來具體說明:
比方說,如果我有一個Student
class,它有一個作為Student
對象的“朋友”列表。 我的軟件設計是否應該有一個ArrayList<Student>
作為Student
class 的成員變量,或者數據庫應該處理關系本身並且Student
class 不考慮那些“朋友”? 在這種情況下,正確的 UML 類圖應該如何?
你需要在關系數據庫和 object model 中建立一對多的Student
和朋友關系。
這個問題比你想象的要廣泛,因為有很多方法可以解決它。 這里有一些初步想法:
讓我們從快速的 class 圖開始。 同學之間的友誼是多對多的關聯。
在數據庫中,多對多關聯通常使用關聯表來實現。 因此,您將有兩個表: STUDENTS
和 FRIENDSHIPS,其中包含成對的好友 ID:
要從數據庫中加載Student
object,您需要讀取STUDENTS
行中的數據並使用它來初始化您的 object。對於友誼,您必須讀取相關的FRIENDSHIPS
行。
但是如何在應用程序中使用這些表呢?
Student
朋友並將其插入ArrayList<Student>
。 但是每個加載的學生就像第一個學生,並且可能有自己的朋友,您也必須加載這些朋友,您最終會加載很多學生,如果不是全部的話。 只是為了得到你感興趣的那一個。ArrayList<StudentId>
而不是ArrayList<Student>
並填充它。 然后你會及時加載朋友,只有在需要的時候。 但這需要在您的應用程序中進行一些更重要的更改。ArrayList
。 不泄露內部總是一個好主意。 而是使用吸氣劑。 因此,只有在調用student.getFriends()
時才加載朋友。 這是一種方便的方法,因為您可以隨意使用一組朋友,但要避免陷入朋友的朋友的遞歸加載中。在所有情況下,您可能有興趣使用存儲庫object 來獲取學生個人或 collections,並封裝數據庫處理。
建議:如前所述,還有更多選擇,存儲庫是一種方法,但也有活動記錄、表網關和其他方法。 要獲得完整的概述,您可能對 Martin Fowler 的書Patterns of Enterprise Application Architecture感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.