2010-03-11 42 views
0

好吧,我正在設計一個獨立的Web服務(使用RestLET作爲我的框架)。我的應用程序被分成在〜3層:如何在應用程序中組織和管理多個數據庫憑證?

  • 數據層(就在數據庫的上方,提供API用於連接/查詢數據庫,和一個數據庫對象)
  • 對象層(負責串行化從數據層...提供客戶端層可以使用的對象而不用擔心數據庫)
  • 客戶端層(該層是RestLET Web服務...基本上只是從對象層創建對象並實現web服務請求)

現在,對於我在對象層中創建的每個對象,我想使用不同的憑據(這樣我可以對每個對象進行沙箱...)。對象層不應該知道確切的憑據(IE登錄/ pw/DB URL等)。

什麼是最好的管理方式?我在想,我的數據層應該有一個超級類型的數據庫對象......並且每個子類都將包含所需的登錄信息......這樣,我的對象層可以去Database db = new SubDatabase();,然後繼續使用該數據庫。

在客戶端級別,他們只能去ItemCollection items = new ItemCollection();,並且不知道/控制連接的數據庫。

我在問這是因爲我試圖讓我的平臺具有可擴展性,以便其他人可以輕鬆地從我的平臺上創建服務。

如果任何人有這些建築問題或如何的經驗來管理這樣的事情我會很感激任何見解或意見...

隨意問的問題,如果這是令人困惑的。謝謝!

我的平臺是Java,我使用的REST框架是RestLET,我的數據庫是MySQL。

+1

如果您使用Spring或任何應用程序服務器,則可以分別配置bean和數據源。您的DAO可以注入或查找相同的內容。如果你編程接口,而不是使用任何數據庫特定的功能,那麼它會正常工作。 – saugata 2010-03-11 05:42:00

回答

1

我覺得你解釋是明智的,你想不暴露數據庫信息和憑據cleint水平。

對於這種情況,您需要考慮可能對您有幫助的任何設計模式。 我可以考慮創建一個實例並在Object層中使用它的單例模式,從而避免顯示有關credentails的任何細節和用戶的URL。

第二個選項,我在腦海裏想到的是使用hibernate層,它可以幫助你隱藏細節並訪問ORM對象,你可以得到你正在尋找的東西。

1

我會回覆@ saugata的評論。查看Spring,並在您的Spring配置中將您的數據源實現(或存根測試!)注入到您的對象層。這應該以多種方式幫助您的整體應用程序體系結構:

  1. 您將能夠在不使用代碼重新編譯的情況下即時切換數據庫(實例或實現)。
  2. 您將完全從其實現中抽象出數據源 - 允許您爲Web服務,隊列實現或存根交換數據庫。
  3. 以這種方式解耦您的應用程序將使其更容易測試。
相關問題