繁体   English   中英

DAL“类型化数据集”或自定义业务对象

[英]DAL “Typed DataSets” or Custom Business Object

我想了解您对“DataSet Designer”和DAL(数据访问层)最佳实践的看法。 我使用Visual Studio 2010 Framework .NEt 4.0。

根据我的理解,“DataSet Designer”允许我使用DataTable和Adapter自动创建严格的Typed-DataSet,它直接在Visual Studio 2010中包含DAL。

我想知道: - 如果在真实场景中“DataSet Designer”运行良好,或者更好地编写自定义业务对象。 - 如果存在.net 4.0中引入的其他新解决方案

感谢您的支持! :-)

我必须使用类型化数据集,这是一场噩梦。 如果您有选择从不使用它们。 一切都更好。

随着.Net 4.0框架的出现和LINQ to SQL的引入,我一直在采用严格编写的业务对象的自定义DAL。 我们简要地尝试了实体框架,但最终得出的结论是它与DataSet非常相似,因为自动生成的代码虽然很方便,但是我们最终没有使用额外的垃圾。

我们发现将LINQ写入DAL并将数据提取到我们的自定义类中,我们能够简化数据访问并在功能上控制数据的使用。 这是一个非常方便的过程,但是初级开发人员需要花一点时间来抓住它。

我建议使用像Entity FrameworkNhibernate这样的ORM

数据集对数据库思维方式的影响太大了,我个人在使用它们时遇到了很多问题。 它们经常被破坏并抛出难以排除故障的奇怪错误。

您可能会感兴趣的其他一些相关问题

使用ORM有什么好处?

ASP.NET DataSet与Business Objects / ORM

使用ADO.NET实体框架,这是微软ORM的未来发展方向。 或者,考虑一个像NHibernate这样的开源软件......

HTH。

在我的公司,我们现在已经使用Typed DataSet一段时间,并且有一个普遍积极的经验。 我知道许多人不喜欢DataSet,并且肯定有更新的数据访问工具,但是既然你问过一个真实的场景,这里有一些我的要求和发现:

  • 需要能够读取SQL Server,MS Access和FoxPro数据源
  • SQL Server访问只能通过SPROC调用(不是我的选择)
  • 相对容易学习,特别是对ASP.NET新手的开发人员

我亲自探索了低级ado.net访问,类型化数据集,linq-to-sql,以及编写自定义数据访问类。 我还没有看过实体框架,因为VS2008中包含的版本似乎有一些混合的评论,直到最近我才能访问VS2010(我计划在今年的某个时候审查EF)。

我们选择使用Typed DataSet,因为它们似乎提供了针对SPROCS的更快开发,我们在asp.net网站上找到了Scott Mitchell的非常全面的教程: http//www.asp.net/data-access/tutorials

至于我们迄今为止的经验,它大多是好的。 即使对于少量的表(<20),DataSet设计器也会生成大量代码。 在SPROCS中进行更改会引起一些麻烦,但我希望看到一个可以使这更容易的工具。

有一件事你可能会尝试让你的决定更容易:提出一个小的域名问题,如客户编辑页面或订单输入页面,并使用各种技术多次实施。 这需要一些时间,但这是一个很好的学习方法,你可以自己比较技术。 我们这样做了,似乎有很多帮助。

我个人更喜欢自定义业务对象的灵活性,但更多的工作。 另请参阅Entity Framework和Linq To Sql。 实体Fx在.NET 4.0中具有更大的灵活性。 本文应该让您开始使用Entity Fx。

如果我认为您应该查看实体 框架 目前 很多伟大的教程在那里,让你开始。

我有条件地同意Joel Etherton的观点。

如果你有一个足够小的项目,即使EF的膨胀,你仍然没有看太多的shenanigan代码,我会说它提供的权宜之计是值得的。 然而,在更大的代码库中,如果让你的双手充满膨胀可能会变得很多。

EF与老式业务对象的另一个好处是,在EF实现中,你可能会更容易升级到更新的.NET版本,利用下一个.NET中的好处,而不必手动重写一堆代码。 (这也可能是一把双刃剑,因为使用EF升级到新的.NET可能会影响你的dal的行为,而手写的dal则不太可能受到影响。)

也就是说,我同意Joel Etherton,写出你可以实现LINQ的最简单的最小dal,dal总是太重要了,无论何时都可以避免过于复杂。

如果您不想浪费时间,请不要学习DataSet。 研究对象关系映射的一般概念,它们的优缺点。 查看Hibernate for Java或Doctrine for PHP等项目。 提供数据库对象包装的DataTables和DataSets背后的方法已经结束。 您的框架应该指导您设计域模型,而不是数据库模式。

NHibernate的。 特别是如果您使用的是Oracle。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM