2008-08-19 50 views

回答

0

這都是關於數據庫層的目的。 如果使用實例訪問數據庫層,則允許存在該類的多個版本。例如,如果您想使用相同的數據庫層來訪問多個數據庫,則這是可取的。

所以,你可能有這樣的事情:

DbController acrhive = new DbController("dev"); 
DbController prod = new DbController("prod"); 

,它允許您使用同一類的多個實例來訪問不同的數據庫。

相反,您可能希望一次只允許在應用程序中使用一個數據庫。如果你想這樣做,那麼你可以看看使用靜態類來達到這個目的。

-2

它取決於您訂閱哪個模型。 ORM(對象關係模型)或接口模型。由於nhibernate,LINQ to SQL,實體框架等許多框架,ORM現在非常流行。 ORM允許您定製一些圍繞對象模型的業務約束,並將它傳遞出去,實際上知道應該如何將其提交給數據庫。與插入,更新和刪除相關的一切都發生在對象中,並且不必擔心開發人員太多。

像微軟公司開發的企業數據模式那樣的接口模型需要你知道你的對象在什麼狀態以及它應該如何處理。它還要求您創建必要的SQL來執行這些操作。

我會說與ORM去。

2

我喜歡將單個對象與數據庫中的單個記錄進行關聯,即必須實例化對象。這是您的基本ActiveRecord模式。根據我的經驗,單對象到單排方法在代碼中創建更流暢,更有文化的演示文稿。另外,我喜歡將對象視爲記錄,將類視爲表。例如更改記錄的名字,我做的事:

objPerson = new Person(id) 

objPerson.name = "George" 

objPerson.save() 

而得到誰住在路易斯安那州所有的人我可以做

aryPeople = Person::getPeopleFromState("LA") 

有很多活動記錄的批評。特別是遇到問題時,您正在爲每條記錄查詢數據庫,或者您的類與數據庫緊密耦合,從而導致兩者都不靈活。在這種情況下,你可以向上移動一個水平,像DataMapper一樣。

許多現代框架和ORM's都知道其中的一些缺點,併爲它們提供解決方案。做一點研究,你會發現這是一個有許多解決方案的問題,而這一切都取決於你的需求。

0

正如lomaxx所提到的,這完全是關於數據庫模型的目的。

我發現最好使用靜態類,因爲我通常只需要創建一個DAL類的實例。我寧願使用靜態方法,而不是處理可能創建多個DAL類實例的開銷,其中只有1個應該存在,可以多次查詢。

0

我會說,這取決於你想要的「DB層」該怎麼辦...

如果您有執行存儲過程或SQL語句的一般程序,返回一個數據集,然後使用靜態方法會對我更有意義,因爲您不需要永久引用爲您創建數據集的對象。

我會使用一個靜態方法,以及如果我創建一個數據庫層,返回一個強類型的類或集合作爲其結果。

如果另一方面你想創建一個類的實例,使用一個給定的參數,如ID(請參閱@ barret-conrad的答案),連接到數據庫並獲得必要的記錄,那麼你會可能不想在類上使用靜態方法。但即使如此,我會說你可能會有某種類型的DB Helper類,DID有你的其他類依賴的靜態方法。

0

另一個「它取決於」。但是,我也可以考慮一個非常常見的情況,靜態只是不起作用。如果您的網站流量很大,並且您有一個共享連接的靜態數據庫層,則可能會遇到麻煩。在ASP.Net,有默認創建應用程序的一個實例,所以如果你有一個靜態數據庫層則只能得到一個連接到數據庫大家誰使用你的網站。

相關問題