2008-08-19 97 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,有默认创建应用程序的一个实例,所以如果你有一个静态数据库层则只能得到一个连接到数据库大家谁使用你的网站。

相关问题