Sql 改进我的数据访问层

Sql 改进我的数据访问层,sql,vb.net,Sql,Vb.net,我在重新编写软件中的数据访问层(如果你可以这样称呼它的话)方面投入了大量精力。这确实是我第一个使用的项目,而且事情是以不恰当的方式完成的 在我的项目中,所有被提取的数据都存储在arraylist中。一些数据从arraylist转换为类型化对象,然后再放回arraylist 此外,应用程序中没有中央查询集。这意味着一些查询是复制和粘贴的,我也希望消除这些查询。这个应用程序有一些对应用程序非常标准的自定义对象,以及一些对这些对象非常标准的查询 我真的不确定是否应该在对象和读写数据库的类之间创建一个层

我在重新编写软件中的数据访问层(如果你可以这样称呼它的话)方面投入了大量精力。这确实是我第一个使用的项目,而且事情是以不恰当的方式完成的

在我的项目中,所有被提取的数据都存储在arraylist中。一些数据从arraylist转换为类型化对象,然后再放回arraylist

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


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

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


之所以这样做,是因为我想将所有数据库操作集中到几个类中,而不是将它们分散到项目中的所有类中

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

我目前正在ASP.NETMVC中开发,我发现LINQtoSQL非常适合。LINQtoSQL使用代码生成来创建对数据建模的代码类集合

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

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

我是一名Java开发人员,但我相信语言不可知论的答案是“是”


看看马丁·福勒的“我相信像LINQ这样的技术就是为此而诞生的。

有一件事我一下子想到了。使用ArrayList而不是泛型有什么原因吗?如果您使用的是.NET1.1,我可以理解,但似乎可以提高性能的一个方面是从图片中删除ArrayList,并停止类型之间的转换和强制转换

在设计数据访问层时,您可能会想到的另一件非常有用的事情是ORM。而且做得很好。总的来说,N层方法对于您想要实现的目标非常有效。例如,使用可以重用的特定方法在类库中执行数据访问要比到处“复制粘贴”相同的查询要好得多


我希望这能有所帮助。

您应该使用ORM。“不这样做就是从你的客户那里偷东西”-Ayende

在过去的几个项目中,我使用了一个基类,它完成了我所有的ADO.NET工作,并继承了所有其他数据访问类。因此,我的UserDB类将继承DataAccessBase类。我的UserDB类实际获取了从数据库返回的数据,并填充了一个用户对象,然后返回给调用的业务对象。如果返回多个对象,则这些对象是通用列表,即返回
list

Daemon Armstrong(谷歌搜索Daemon Armstrong)有一篇好文章,演示了如何实现这一点

“”“


然而,我现在已经开始使用EntityFramework,因为它的性能更好,并且节省了所有手动CRUD操作。我本来打算使用LINQ to SQL,但因为它似乎很快就要死在水里了,所以我认为最好在下一个ORM上投入我的时间。

Ha!我只是在查阅他的帖子正如您所回答的。很好的vonnegut参考。因为我真的没有什么经验编写任何比hello world类型的应用程序更大的东西。我甚至不知道泛型是什么,直到走得更远,我当然没有意识到它的好处,也没有意识到我最终将编写的查询的数量。这很公平。不过,我很高兴你现在知道了:)。除掉那些鬼鬼祟祟的阵列主义者!谢谢你的链接。我读了这篇文章,它看起来相当容易完成,看起来也更容易处理