改善我的数据访问层

时间:2009-05-22 20:15:24

标签: sql vb.net

我正在重新编写我的软件中的数据访问层(如果你甚至可以称之为)。这实际上是我使用的第一个项目,事情是以不正当的方式完成的。

在我的项目中,所有被拉的数据都存储在一个arraylist中。在被放回到arraylist之前,一些数据从arraylist转换为一个打字对象。

此外,应用程序中没有中央查询集。这意味着一些查询是复制和粘贴的,我也想删除。这个应用程序有一些非常标准的自定义对象,以及一些对这些对象非常标准的查询。

我真的不确定是否应该在我的对象和读写数据库的类之间创建一个层。该层将获取来自数据库的数据,将其键入为正确的对象,如果存在返回多个对象的情况,则返回这些对象的列表。这是一个好方法吗?

另外,如果这是一种很好的做事方式,我应该如何从数据库中返回数据?我目前正在使用SqlDataReader.read,并填充数组列表。我确信这不是在这里使用的最佳方法,我只是不清楚如何改进这一点。

所有这一切的原因是,我想将所有数据库操作集中到几个类中,而不是将它们分散到项目的所有类中

5 个答案:

答案 0 :(得分:5)

您应该使用ORM。 “不这样做就是偷走了你的客户” - 艾恩德

答案 1 :(得分:4)

立即想到一件事。您是否有理由使用ArrayLists而不是泛型?如果您使用的是.NET 1.1,我可以理解,但似乎您可以获得性能的一个方面是从图片中删除ArrayLists并停止在类型之间进行转换和转换。

在设计数据访问层时,您可能想到的另一件事可以帮助很多东西是ORM。 NHibernateLINQ to SQL做得非常好。一般来说,N层方法适用于您正在尝试完成的任务。例如,使用可以重用的特定方法在类库中执行数据访问远比在整个地方“复制粘贴”相同的查询要好得多。

我希望这会有所帮助。

答案 2 :(得分:2)

这实际上取决于你在做什么。如果它是一个不断增长的应用程序,具有用户界面等,那么你是对的,有更好的方法。

我目前正在ASP.NET MVC中开发,我发现Linq to SQL非常舒服。 Linq to SQL使用代码生成来创建一组代码类,用于为数据建模。

ScottGu在他的博客上对Linq to SQL进行了非常好的介绍:

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

答案 3 :(得分:1)

我在过去的几个项目中使用了一个基类来完成我所有的ADO.NET工作以及所有其他数据访问类的继承。所以我的UserDB类将继承DataAccessBase类。我现在拥有它,我的UserDB类实际上从数据库返回数据并填充User对象,然后返回到调用的Business Object。如果返回多个对象,则这些对象是通用列表,即返回List<Users>

Daemon Armstrong撰写了一篇很好的文章(在Google上搜索Daemon Armstrong,该文章演示了如何实现这一目标。

“”http://www.simple-talk.com/dotnet/.net-framework/.net-application-architecture-the-data-access-layer/ “”

但是我现在已经开始将所有这些转移到使用权利框架,因为它的执行效果更好,并节省了所有这些手动CRUD操作。本来打算使用LINQ to SQL,因为它似乎很快就会死在水里,我认为最好把时间花在下一个ORM上。

答案 4 :(得分:0)

“我真的不确定是否应该在我的对象和读写数据库的类之间创建一个层。这个层将获取来自数据库的数据,将其键入为正确的对象,以及如果有多个对象被返回的情况,返回那些对象的列表。这是一个好方法吗?“

我是一名Java开发人员,但我相信与语言无关的答案是肯定的。

看看Martin Fowler的"Patterns Of Enterprise Application Architecture“。我相信像LINQ这样的技术就是为此而诞生的。