2009-08-24 101 views
0

注意:WinForms C#早期學習級別!設計:訪問兒童收藏,同時避免父母!

我想在C#對象環境中實現某種情況的最佳方式提供一些幫助。我不能發佈代碼,因爲它還不存在,但我可以給你一個替代的現實生活中的比較。

簡而言之(因爲那就是我的工作方式)我有一本Book類。我有這些Book類的集合(<List>)。 在每個Book類中,我有一個Chapter類的集合(<List>)。書中的Class和Chapter類是基於完全不同的抽象類。它們在單獨的業務層中定義,數據從數據源層加載。請記住,有許多書籍和許多章節。

從我的GUI層我可以檢索一本書,它是基於集合索引/鍵的基礎屬性。我也可以通過Book類獲得書中的所有章節。

我需要做的是能夠從任何書籍中獲取任何章節類,而無需通過Book類。 實現此目的的最佳方式是什麼?

Thanks guys and gals

回答

2

你是什麼意思的「get」。你期望在內存中擁有所有的章節嗎?或者我們在搜索數據庫?

什麼信息標識一章?我們假設所有的章節(或者如果不是章節的完整文本,然後是章節描述符)都在內存中。你有章節集合由ChapterIdentity(可能是BookId + ChapterNumber)鍵入。

所以,那麼它只是

ChapterCollection.getById(aChapterId); 

當您添加一本書,你需要將它的所有章節添加到收藏。

更可能這是來自數據庫。所以你希望能夠通過id檢索章節。這一切都取決於你如何做持久性,但從概念上看,就像從檢索者的角度看內存中的例子。

+0

'get'將意味着搜索並從內存中檢索對章節的引用,然後可以使用該引用來查詢數據庫的所有詳細信息。 一章將會有一個唯一的id以及它的標題。 您是否建議我保留書籍和章節的單獨集合,然後將它們鏈接起來,而不是在書中擁有章節的層次關係? – 2009-08-24 23:48:36

+0

您可以同時擁有層次關係和「所有章節」集合。在對象模型中有多條訪問路徑是非常合理的。然而,我不確定它是否合理地將整套章節保存在內存中 - 對於我猜想的國會圖書館員來說不起作用?因此,提供getById()的服務api可能會隱藏或者不存在整個內存。必要時進行數據庫檢索。 – djna 2009-08-25 06:18:12

1

爲什麼你不想去看書課?真的,你只有兩種選擇 - 搜索書類對象列表或維護一個包含所有書籍所有章節的二級集合對象。 我假設會有一個你將要搜索的關鍵字,那就是章節類的一個屬性?如果是這樣,你可以使用快速搜索的字典(關鍵字,章節),或者保留一個List(of Chapter),並使用LINQ來搜索它。 這取決於你在尋找什麼,以及你避免讀書課的理由。

+0

第二個收集選項是我能想出的唯一的東西,它似乎有一個更好的方式來做到這一點。 – 2009-08-24 23:51:17

0

如果你沒有讀書類,你需要一個「庫」集合,其中包含對所有章節對象的引用。