DB层成员应该是静态还是实例?

时间:2008-08-19 14:49:55

标签: database orm class-design

我见过数据库层中的类只有静态函数的项目,以及需要实例化这些类以访问成员函数的其他项目。

  

哪个“更好”,为什么?

6 个答案:

答案 0 :(得分:2)

我喜欢将单个对象与数据库中的单个记录相关联,即必须实例化对象。这是您的基本ActiveRecord模式。根据我的经验,一对一对一行的方法在代码中创建了更流畅,更有文化的表示。此外,我喜欢将对象视为记录,将类视为表。例如,要更改我所做记录的名称:

objPerson = new Person(id)

objPerson.name = "George"

objPerson.save()

虽然为了让所有居住在路易斯安那州的人都可以做到

aryPeople = Person::getPeopleFromState("LA")

对Active Record有很多批评。您可以特别遇到的问题是,您要查询每个记录的数据库,或者您的类与数据库紧密耦合,从而在两者中创建不灵活性。在这种情况下,您可以向上移动一个级别并使用类似DataMapper的内容。

许多现代框架和ORM's都知道这些缺点中的一些并为它们提供解决方案。做一点研究,你会发现这是一个有很多解决方案的问题,这一切都取决于你的需求。

答案 1 :(得分:0)

这完全取决于数据库层的目的。 如果使用实例访问数据库层,则允许存在该类的多个版本。例如,如果要使用相同的数据库层访问多个数据库,则需要这样做。

所以你可能会有这样的事情:

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

允许您使用同一类的多个实例来访问不同的数据库。

相反,您可能希望一次只允许在应用程序中使用一个数据库。如果你想这样做,那么你可以为此目的使用静态类。

答案 2 :(得分:0)

正如lomaxx所提到的,这完全取决于数据库模型的目的。

我发现最好使用静态类,因为我通常只想创建一个DAL类的实例。我宁愿使用静态方法来处理可能创建我的DAL类的多个实例的开销,其中只有1个应该存在,可以多次查询。

答案 3 :(得分:0)

我想说这取决于你想要“DB层”做什么......

如果你有执行存储过程或sql语句的一般例程,它返回一个数据集,那么使用静态方法会对我更有意义,因为你不需要永久引用创建数据集的对象对你而言。

如果我创建了一个返回强类型类或集合作为结果的数据库层,我也会使用静态方法。

另一方面,如果你想创建一个类的实例,使用给定的参数如ID(参见@ barret-conrad的答案),连接到DB并获得必要的记录,那么你可能不想在类上使用静态方法。但即便如此,我还是说你可能有某种DB Helper类,DID具有你的其他类所依赖的静态方法。

答案 4 :(得分:0)

另一个“它取决于”。但是,我也可以想到一个非常常见的场景,静态就行不通。如果您的网站获得了大量的流量,并且您有一个带有共享连接的静态数据库层,那么您可能会遇到麻烦。在ASP.Net中,默认情况下会创建应用程序的一个实例,因此如果您有一个静态数据库层,则只能获得一个连接到数据库<使用您网站的所有人。

答案 5 :(得分:-2)

这取决于您订阅的模型。 ORM(对象关系模型)或接口模型。由于nhibernate,LINQ to SQL,Entity Framework等许多其他框架,ORM现在非常受欢迎。 ORM允许您自定义对象模型周围的一些业务约束并传递它,而实际上不知道应该如何将其提交到数据库。与插入,更新和删除相关的所有内容都发生在对象中,并且实际上不必太担心开发人员。

像Microsoft一样受欢迎的企业数据模式之类的接口模型,要求您了解对象所处的状态以及应如何处理它。它还要求您创建必要的SQL来执行操作。

我会说与ORM一起去。

相关问题