2011-04-15 28 views
1

我有相當多的使用VB6,VB.NET,C#等編程的經驗,並且使用了ADO,然後是SubSonic,現在我是學習nHibernate,因爲大部分潛在的工作我都可以使用nHibernate。我不確定什麼是訪問數據庫的一攬子方法

事情是,我一直在編程基礎上,我被教導,閱讀或理解爲最佳實踐。最近,有人通過作品中的扳手讓我思考。直到現在,我一直在訪問我編寫的核心應用程序和附加的DLL中的數據庫。

這是什麼人說結束如下,因此我的問題:

可以告訴你 ,你通常不會想這樣做 - 外部類庫應該不能訪問該數據庫

我想要做的是有一個共享/靜態類的nHibernate會話,可以在應用程序的全球範圍內,並從任何DLL消耗。這個類是在一個「核心」DLL中的所有dll和應用程序參考。就像我說的,我正在學習nHibernate,所以它可能不是這樣。

要說我質疑我的數據庫訪問方法是輕描淡寫。

任何人都可以直接告訴我嗎?

編輯:

我想望着眼前已經被註釋,這取決於數據庫是如何被訪問。我傾向於永遠不要把用戶名/密碼憑證等硬編碼在任何DLL中。

更具體地說,我的查詢與NHibernate的會話有關。我有一個靜態類,一個助手類,它在應用程序啓動時被調用,然後創建新的會話並將其附加到當前上下文(對於Web應用程序),然後每當我需要會話時調用「GetCurrentSession」。這個靜態類位於「核心」dll中,可以通過引用的任何DLL等進行訪問。這是行爲的目的。我唯一的問題是,這可以嗎?我應該以另一種方式去做嗎?

回答

1

有兩個原因會

  1. 對數據庫的訪問,你怎麼蓋掉用戶名/密碼
  2. 共享DLL,一個「壞」的應用程序可以讓你的DLL和紐帶保持與它可以訪問你的數據庫。

說了這麼一句話,如果你對文件有適當的安全性等,那麼我會認爲使用DLL可能是一個合理的方法。

+0

嗯,我可能正在想這個人究竟是怎麼回事。然而,由於我已經使用Subsonic和現在的nHibernate,它們基本上是外部的Dll,與你所提到的類似。我猜想CAS或專用應用程序池可以防止消耗這些資源的攻擊。 – Anthony 2011-04-15 18:22:57

1

假設用戶名和密碼不直接存儲在DLL中(但可能作爲參數傳遞,或作爲完整的連接對象傳遞),這並不是很糟糕。

這裏可能的錯誤做法可能是從不同的地方訪問相同的數據庫 - 核心應用程序和DLL。這可能會讓新開發人員很快產生混淆,除非這種分離是明確而合乎邏輯的。我可能會嘗試將所有(或幾乎所有)數據訪問移動到一個DLL 只是爲此目的,然後在覈心應用程序或另一個DLL中擁有嚴肅的應用程序邏輯(或儘可能多) 。

+0

是的,那是我正在合作的東西。我通常會嘗試製作一個「核心」DLL,它可以在多個應用程序,用戶登錄表和代碼或會話狀態提供程序之間共享。然後這些應用程序的specfic代碼進入其他DLL。 – Anthony 2011-04-15 18:26:32

相關問題