2010-05-10 68 views
2

我正在構建一個應用程序,該應用程序將用作客戶端服務器應用程序,也可以用作斷開連接的客戶端應用程序。我將使用WPF(客戶端 - 服務器應用程序的瀏覽器應用程序)。可以在Web服務層和數據訪問層之間切換的服務層

當與服務器的數據庫進行交互時,我需要使用WCF Web服務進行連接。與本地數據庫連接時,我需要使用本地數據庫的數據訪問層進行連接。

這種架構存在哪些方法/模式?

編輯: 我能爲查爾斯與此SO post的幫助下建議創建兩個數據/ WCF Web服務的公共服務層。

回答

4

請注意,我不認爲自己是這方面的專家。但我希望這些沉思有一定用處。這些基於我自己的經驗。

您可以通過實現數據訪問層(DAL)的兩個實現來實現此目的。

定義業務層和DAL之間的單一通用接口。

創建與數據庫交談的DAL的一個實現。

創建與Web服務對話的DAL的一個實現。

這兩個都將實現您的通用接口,使業務層(BL)無需知道當前正在使用哪個DAL。顯然,處理應用程序和其中一個DAL之間的連接需要一些特殊的邏輯。這可能存在於DAL和BL之間的特殊層中,或者存在於交叉層(例如通信層)中。

對於您來說,將界面更多地轉向一個實現或其他實現可能更實用。如果是這樣的話,你可能不得不調整接口的較少實現。爲了在保持鬆散耦合的較小層的實際實現的同時執行此操作,可以使用適配器模式。

其他注意事項:也許您希望您的DAL實施可以重複使用。從本質上講,它們本身就是API。在這種情況下,您可以將它們設計爲相對非特定的公共界面。現在,DAL指定其與消費者(您的應用程序)的接口,而不是反之。

除此之外,它是直接的分層和抽象。這裏是一個可下載的微軟應用程序架構(我剛開始閱讀)的出版物:http://msdn.microsoft.com/en-us/library/ff650706.aspx

+0

非常感謝。這使我指出了正確的方向! – 2010-05-11 17:37:55

+0

非常歡迎。 :) – 2010-05-11 23:15:53

0

該模式將工廠與策略。你可以做這樣的事情 - IDatabase的所有方法定義爲連接等DBWCF類連接到Widget服務,從Idatabase.dblocal繼承本地數據庫也繼承了Idatabase。在配置文件中指定是否需要連接本地數據庫或使用wcf。有一個配置類可以從配置文件讀取並調用必要的工廠。工廠將安裝wcfdb或dblocal類。到處都使用Idatabase。