我想知道這件事是從下面較好的兩個使用Web服務或直接從數據庫中檢索數據...是它更好地在.NET
- 通過創建Web服務
- 檢索數據創建數據庫連接代碼背後調用存儲過程和檢索數據
任何人都可以解釋它是如何不同?
我想知道這件事是從下面較好的兩個使用Web服務或直接從數據庫中檢索數據...是它更好地在.NET
任何人都可以解釋它是如何不同?
那麼,如果你沒有理由使用Web服務,那麼不要。如果可以的話,去掉不必要的圖層總是更好,並且直接對數據庫(當然是通過單獨的類庫)。爲了使用它,真的沒有理由使用Web服務。
如果您要跨服務器擴展代碼以獲得更好的可伸縮性,則Web服務非常有用。但是,如果一切都將在同一臺服務器上運行,那麼Web服務所帶來的額外複雜性就沒有多大優勢。如果你想分層你的代碼,你可以輕鬆地爲DB代碼創建一個類庫。
直接從Web應用程序直接訪問數據庫絕不會更好。這件事情是由很多原因導致的。首先我能想到的是安全性,然後是抽象。有很多原因,我的大腦與他們短路。 – 2010-05-05 13:07:44
你沒有閱讀我的整個答案有光滑。 「如果你想分層代碼,你可以輕鬆地爲DB代碼創建一個類庫。」 – dcp 2010-05-05 13:16:05
的確如此,但我的意見更多的是針對你的陳述:「如果可以的話,最好刪除圖層,如果可以,直接與數據庫直接對話。」 – 2010-05-05 13:19:19
使用Web服務增加了額外的步驟,因爲Web服務最終將需要連接到數據庫以檢索數據。使用Web服務是一種折衷。您最終會犧牲一些速度,以便在UI和數據庫之間進行額外的抽象。
Web服務在數據庫和網站之間添加了一個抽象層。該網站不會直接知道數據層發生了什麼,從而允許Web服務層轉換數據並應用網站(或UI層)不需要關心的業務邏輯。如果您打算在多個應用程序Web服務中使用複雜的邏輯,可以提供幫助,因爲所有的應用程序都可以連接到它,並將必要的規則和轉換應用於數據。
如果您想向第三方供應商提供數據,應該使用Web服務。如果必須跨越網絡邊界和防火牆,它通常被使用。 在大多數情況下使用SP訪問數據是安全的。
我永遠不會直接從asp.net應用程序直接進入數據庫。始終將您的數據庫訪問抽象爲單獨的程序集。然後您可以選擇是直接調用數據層assenmbly還是通過webservice調用。
這是一個建築的決定,取決於你正在構建什麼應用,它是如何部署的,等
通常,它是一個很好的設計原則,無論使用Web服務,使用模型來分離,如數據,業務邏輯和表示層。
對於Web服務,例如,如果您的部署跨越了一系列服務器,並且數據訪問和業務邏輯與演示分離,並且演示文稿可能是面向公衆的Web UI,那麼您可能希望將Web服務器上的Web UI(出於安全原因)從底層業務邏輯和數據層進行防火牆。這樣做可能更容易以Web服務的形式向UI層提供接口。
您可能希望將您的業務邏輯公開給其他消費者,並作爲他們使用的API,並且Web服務在此處理想。如果您的用戶界面後來出現給第三方,則可能需要使用Web服務來公開業務邏輯接口,同時保護實施。Web服務還允許您的UI成爲獨立於實現的語言。
它沒有被這種方式雖然。您可以公開業務邏輯和不是Web服務的UI之間的接口。您可能只是將所有內容部署在一臺服務器上或某個不需要Web服務的內部部署中,而只是決定將asp代碼調用直接引入業務邏輯/數據訪問程序集。
但是不管Web服務,最好不要只是把數據訪問或業務邏輯代碼直衝UI代碼。它將您的用戶界面與實現細節聯繫在一起,並且如果您希望將來替換用戶界面,則難以分離。
機會是,無論你的選擇是最好的。
我一直避免直接從代碼中調用數據庫的後面。抽象出您的數據庫邏輯,以便在消費代碼(您的代碼背後)與負責實際檢索數據的代碼之間有一層分離。
話雖如此,使用Web服務作爲這種「抽象」纔有意義有時。 Web服務通常需要爲每次調用序列化數據,並且由於此(和其他)原因而昂貴。除非您需要Web服務(例如,允許通過http代理和防火牆訪問),否則請仔細思考此應用程序。
不理解你的使用情況下,可能更有意義,讓您的數據的邏輯獨立的(例如,在一個單獨的組件),而不是後面的Web服務。您應該研究創建C#對象的「域模型」,並讓您的數據庫抽象返回這些對象,而不是返回連接/數據讀取器。您可能還想看看其他工具,例如對象關係映射器(如NHibernate),這些工具可能會耗費大量工作量。
你打算如何使用這些數據?你只是在讀它嗎?或者你還會編輯它並將其保存回數據庫? – Theresa 2010-05-05 13:01:16