2012-03-03 47 views
1

假設我們有3個實體:Library,Section & Book。簡單應用的類圖

A Library由幾個Sections組成。 A Section有幾個Books

A Book可能只屬於1 Section。最後一個Section可能只屬於1 Library

我看到它的方式是,類Library聚集Sections和類Section聚集Books集合的集合。

現在我需要將所有圖書上傳到服務器。我構建了一個類BookUploader,它在構造函數中使用Book對象。在服務器上,我爲每個庫創建一個文件夾,並在每個庫內創建一個Section文件夾,並將Book放入其中。

問題是因爲我將Book對象傳遞給BookUploader我不知道Section是什麼。另外我不知道哪一部分屬於哪個圖書館。

所以我想我只是將庫對象傳遞給BookUploader,然後循環所有部分,然後循環每個部分中的所有書籍,但有人告訴我,現在BookUploader依賴3個類來上傳書籍,這是一個糟糕的設計。

他建議每個Book對象都應該保存它的Section,每個Section應該保存它的Library,它是我原始設計的總逆向。

任何人都可以分享他的想法,哪個設計更好,爲什麼?

在此先感謝。

+1

您的設計如何強制「書」在一個部分?你的意思是它迫使一本書的實例在一個單獨的部分?如果是這樣,那確實如此,但是同一本書的多個「副本」呢,除非你小心總是正確地構建它們,否則這些副本可能會在多個部分中傳播。既然你是在模擬現實世界的情況,想想它在現實世界中的處理方式。一本書幾乎總是以某種方式蓋上圖書館和部分信息,而圖書館/部分也可能有一本書可用的清單... – Chad 2012-03-03 15:09:45

+0

@Chad是的,在我的設計中只有一本書的副本。我的問題是哪個對象應該包含其他對象? Library對象應該保存一個Sections集合還是每個Section都應該保存一個Library對象? – Songo 2012-03-03 15:24:41

+1

這看起來非常合適,但回到了關於如何處理book-> library關係的原始問題(與您迄今試圖建模的相反)。假設(IRL)你在外面找到一本圖書館。你怎麼知道這是一本圖書館書?書上有一些標記可以告訴你嗎?我敢打賭,有... – Chad 2012-03-04 15:48:27

回答

0

閱讀@ Chad的評論後,我意識到設計本身需要對所討論的實體進行一些修改。 缺少的是每個子類中的一個函數,它將返回對其父項的引用。

1

將聚合定義爲雙向關聯的一端沒有任何問題。 (查看herehere的例子。)

如果你正在尋找實現細節,在EReferences中的ecore的EOpposite功能。

+0

+1。謝謝 – Songo 2012-03-04 19:31:08