2009-11-05 29 views
5

我正在爲將提供產品的應用程序構建wcf服務的階段..我有應用程序下的域模型和持久層。將數據訪問層移動到WCF服務

對於服務我還需要一個類似的域模型和持久層。我不想複製東西,也不想共享庫並將應用程序和服務連接起來。

因此,這讓我覺得如果我應該創建一個單獨的服務(或者在我創建的這個新實現中實現)數據訪問層並使用該服務從appication訪問數據,那麼會有隻有一個應用程序和服務共享的數據訪問層

這是一個很好的模式,並且是否有重大問題等待我的下一步,如果是的話,那麼您的建議是什麼?謝謝!

回答

1

我曾經處於和你一樣的狀況。起初在開發過程中,沒有可用的數據訪問的wcf服務,所以我使用nhibernate進行數據訪問。爲了便於從直接nhibernate訪問切換到wcf服務數據檢索,我有這樣的:

client app -> Repository Interfaces -> Repository Implementations(起初這一個通過nhibernate檢索數據,通過wcf第二個實現)。

具有隱藏應用程序代碼中的實現細節的接口可能是適合您的問題的解決方案。 (順便說一句,nhibernate數據訪問代碼主要在服務器端重用,所以你不必扔掉東西)。

+0

這正是我的情況,因爲我也使用nhibernate,而且我確實擁有存儲庫接口,然後在單獨的庫中實現存儲庫實現。有沒有具體的例子可以通過我可以查看的服務來做到這一點? – kaivalya 2009-11-05 12:46:24

+0

對不起,我不能讓你訪問我們的代碼庫。然而,如果你只是從你的客戶端應用程序訪問一個接口,你不必關心實際的實現。當涉及通過wcf傳輸nhibernate實體時,請注意延遲加載集合的序列化問題。 wcf不喜歡nhibernate代理 – 2009-11-05 14:16:09

1

如果您有WCF服務作爲資源訪問層,您可以將您現有的數據訪問層從您的客戶端應用程序移開,因爲您的WCF Web服務是數據交換的端點。

目前,

客戶端應用< - >數據庫訪問

這是不好的做法,它暴露了你的數據庫的公共和數據庫的端口可能被阻止在默認情況下。

與web服務,

客戶端應用< - > Web服務(數據庫訪問)

它應該有適當的安全執行(HTTPS和身份驗證)。 Web服務通常託管在友好的端口80上,您不必公開底層數據庫。

+0

這是廢話。你不知道你在說什麼。 – DarthVader 2013-09-09 20:46:47

-1

我認爲應用程序中應該只有一個數據訪問層。因此,如果您創建一個服務並從中獲取數據,則通過一切手段刪除客戶端的每個直接數據連接。

這也意味着你不必公開你的數據庫,而且任何人篡改數據庫的機會都會很低。