2011-07-03 77 views
0

我玩弄面向對象設計/數據庫設計通過創建可拉從各種來源,如亞馬遜或IMDB信息,以保持信息對電影的應用/音樂/書籍我還是看過/讀取等...電影,書籍,專輯等產品對象由一個或多個來源的屬性組成,在不同類型的對象之間有一些重疊(例如,所有產品都有一個Title,ASIN等等)。此外,各種資源可能有一些相同的信息(例如發佈日期)以及一些不同的信息(例如IMDB包含關於演員的更多信息,我可能想使用,但我不會從亞馬遜獲取這些信息)。我希望能夠選擇來自哪些來源的重疊屬性。見鏈接圖像的一個簡單的例子:OOD媒體查詢應用程序

http://imageshack.us/photo/my-images/194/drawing1r.png/

好像重新定義,我在電影類的解析器類定義的所有屬性是有點多餘,甚至moreso如果我繼續創作其他諸如Book,Album(重新定義ASIN,IMDBId等)。我似乎正在接近這個錯誤。

一個更好的設計,更易於擴展和維護有什麼建議?

回答

0

您可以創建一個名爲「Product」保存您的電影,圖書和歌曲之間的共同特性超。然後,這些特定對象類型中的每一個都將從公共父類繼承。

不宜亞馬遜和IMDB解析器創建產品對象?他們爲什麼擁有產品的特性?如果您分別解析每個產品,則可以說每個產品都會自行解析,並將代碼包含在每個特定產品類別(或父級)中。每個對象確實應該有一定的功能,或者代表某種對象 - 做你的解析器代表一個對象或他們執行功能(解析)這創建對象?

您也可以爲每種類型的源或接口(IProductSource)創建一個公共父類,然後調用該接口的方法,而無需您的特定對象知道/關心接口後面的實際數據源。

+0

的IMDB /亞馬遜分析,因爲產品不僅從單一來源組成信息的不創造產品對象。我將屬性保留在解析類中的原因是,我可以選擇使用哪個數據源來用於「產品」類的特定屬性。由於每個源可能獲得不同的屬性,因此很難創建IProductSource接口。 – user623879