簡體   English   中英

了解如何 model UML 類/數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM