2010-02-19 62 views
0

這是理論上的問題,但任何的建議是更受歡迎..設計Condiderations應用程序開發

當根據許多書OO設計的應用程序,你應該有一個類與字段類變量數據庫的每個表..

但是,當你想獲得多個表的數據,並將其存儲對象的集合中,你會發現,你需要一個對象,將有變量在多個表..

舉例:需要獲得ISBN /作者的名字/作者的姓氏/類別的書籍列表 實際數據在3個表格中:書籍/作者/類別和作者/類別的ID作爲書籍表的外鍵..

什麼是最佳設計方法?添加到書類更多的變量(作者的名字/作者的姓氏/類別)或不?

希望很清楚..

感謝您的任何迴應。

回答

0

「每桌一班」是一條經驗法則,很好的開始。但它不是刻在石頭上的。您可以(也應該)評估應用程序的需求,數據的預測使用模式等。將多個表映射到單個類並不罕見,反之亦然:將單個表表示爲多個類。

建議根據OO範例設計您的類(而不是試圖將它們映射到您的表結構)。如果需要,您可以對課程設計進行微調以符合數據層的要求。

在具體情況下,取決於您是否預見需要單獨獲取書籍數據(沒有作者&類別),還是更典型一次需要全部3個。這也是一個問題,作者和類別有多少屬性。

如果您經常只抓取書籍數據和/或作者&類別有很多屬性,將它們保存在不同的類中更有意義。如果你將它們放在一個班級中,你將會有很多重複的數據(因爲很多書籍會有相同的類別或作者數據),並且你總是需要不必要地加載3行數據庫中的連接,因此你需要付出一定的性能在大多數情況下,沒有任何懲罰。

OTOH如果您通常一次從所有3個表中獲取數據,那麼將它們保留在一個類中可能有意義。即使如此,我仍然會選擇單獨的課程,以避免類別數據的重複。此外,如果這些作者是分開的實體而不是Book類的一部分,您甚至可以將作者的類別緩存起來。

很大程度上取決於您的開發語言和工具;例如在使用像Hibernate這樣的ORM工具的Java中,設置這些映射要容易得多,在您瞭解應用程序的更多信息時使用延遲獲取並優化獲取計劃,使用JDBC。

+0

非常感謝您的回覆! 的確,我決定爲作者和類別分別開設類,並且Book類有一本書的屬性Writer和Category對象。 – Nikos 2010-02-21 19:29:32

0

該類別和作者的名字是書類的屬性似乎是合理的。至於實現,您可以創建一個服務,從不同的表中獲取所有信息以讀取類Book的對象。

+0

非常感謝您的回覆。 有沒有其他的方法對嗎? 從其他「實體」添加屬性是唯一的方法? – Nikos 2010-02-19 09:28:45

0

您不必爲每個數據庫表都有其他方法的類。領域驅動設計(DDD)是一套指導方針,是設計您的應用程序的自頂向下方法。在DDD世界中,您編寫代碼來解決業務問題,而不是建模您的數據層。有很多情況下,您的數據庫模式與您的域設計有很大不同。

Eric EvansJimmy Nilsson這兩本書都寫得很好,我強烈建議你看看。

+0

非常感謝, 我需要使用面向對象設計來實現這一點,但我會記住你的建議。 – Nikos 2010-02-19 09:51:08