.net 类型化数据集的缺点是什么

.net 类型化数据集的缺点是什么,.net,ado.net,data-access-layer,dataset,.net,Ado.net,Data Access Layer,Dataset,我来自一个喜欢构建自己的库而不是依赖他人构建的库和框架的世界。在逃离这个世界之后,我发现了在VisualStudio中使用类型化数据集等工具的乐趣和轻松。那么除了失去灵活性之外,你还失去了什么?是否存在性能因素(忽略过程与动态sql的争论)?限制?与非类型化数据集相比,类型化数据集的性能得到了提高(尽管我从未发现像这样的琐碎事情的性能问题值得担心) 我想说最大的痛苦就是保持它们与您的数据库同步——我不能为VS2008说话,但之前的版本并不能提供很好的支持。每次结果集的模式更改时,我都会将过程拖到

我来自一个喜欢构建自己的库而不是依赖他人构建的库和框架的世界。在逃离这个世界之后,我发现了在VisualStudio中使用类型化数据集等工具的乐趣和轻松。那么除了失去灵活性之外,你还失去了什么?是否存在性能因素(忽略过程与动态sql的争论)?限制?

与非类型化数据集相比,类型化数据集的性能得到了提高(尽管我从未发现像这样的琐碎事情的性能问题值得担心)

我想说最大的痛苦就是保持它们与您的数据库同步——我不能为VS2008说话,但之前的版本并不能提供很好的支持。每次结果集的模式更改时,我都会将过程拖到设计器上。不好玩

但是,您确实可以进行编译时类型检查,这非常好,例如Customer.Name而不是Dataset.Tables(0).Rows(0)(“Name”)

所以,如果您的模式是相对静态的,那么它们可能是值得的,但除此之外,我不会费心


您还可以研究真正的ORM。

类型化数据集没有什么问题。它们并不完美,但这是解决对象关系阻抗失配问题的下一步。我面临的唯一问题是对模式更改的支持不足。分部类可能会有所帮助,但并非在所有情况下都有帮助。

我只对类型化数据集进行了很短的尝试。当我发现我的代码在一个1000多行的生成代码文件中大约有2/3被破坏时,我停了下来

我不喜欢的另一件事是,我认为我会编写类似Customer.Name的代码,但在默认情况下,我似乎会得到类似CustomerDataSet.Customers[0].Name的代码,其中Customers[0]属于customerRow类型。与非类型化的数据集相比,阅读起来仍然更好,但这并不是我想要的语义


就我个人而言,我沿着ActiveRecord/NHibernate的路线前进,从那以后就再也没有回头看。

我要提出的主要批评是,它们的可扩展性不好——与轻量级业务实体或DTO或LINQ to SQL相比,当事务数量增加时,性能会受到开销的影响。此外,模式更改也让人头疼。对于一个“工业实力”的架构来说,它们可能不是一条可行之路,从长远来看,它们将引发问题


我仍然肯定会将它们用于快速而肮脏的POC或简单的实用程序——它们非常方便在Visual Studio中使用给定的工具并完成工作。

类型化数据集是从经典ADO断开连接的记录集升级而来的。我发现,在需要执行某种面向行的排序任务的简单情况下,它们仍然可以很好地使用——也就是说,您仍然希望在包含行、列、约束等的数据库范例的上下文中工作。如果在这种情况下使用得当,那么你就没事了

在几个方面,它们的好处会减少:

  • 我认为这里提到的同步问题肯定是个问题,特别是如果您已经定制了它们或将它们用作基类的话
  • 根据数据集中数据表的数量,它们可能变得非常胖。我的意思是,多表数据集通常呈现数据的关系视图。除了内存占用之外,随之而来的是键的定义和潜在的其他约束。同样,如果这是您需要的,但如果您需要快速遍历数据,那么使用数据读取器的高效循环可能是更好的选择
  • 由于其复杂的定义和潜在的规模,在远程情况下使用它们也是不明智的
  • 最后,当您开始意识到需要在与您的问题域相关的对象中处理数据时,它们的使用将成为一种障碍而不是一种好处。您经常会发现自己在集合中的表中行和行之间移动字段,并关注表和行的状态。您开始意识到,它们使OO语言更容易表示现实世界中的问题域对象,而使用表、行和列实际上并不适合这种思维方式

一般来说,根据我的经验,我发现复杂系统(例如许多大型企业系统)最好远离数据集的使用,而更多地转向坚实的领域特定对象模型——如何将数据进出这些对象(例如使用ORM)是另一个话题。然而,在需要进行基本维护和其他一些简单操作的数据前面有一个表单的小项目中,数据集范例可以实现很高的生产率——特别是当与Visual Studio/.Net强大的数据绑定功能相结合时

如果前面提到的所有问题都被忽略,那么数据集很适合与VisualStudio快速结合。我没有提到的一个问题是VisualStudio设计图面内数据集的可视可伸缩性。随着系统的发展,数据集的大小不可避免地变得笨拙。设计师的视觉方面根本无法缩放。当数据集有20多个左右的表时,滚动查找特定的表或关系是一件非常痛苦的事情。

我不太喜欢类型化数据集。使用类型化数据集无法提高性能。它纯粹是对现有数据库对象的包装。我不能考虑访问,如<强>雇员。铸造仍在包装中进行。另一个开销是大量代码。LOC增加。内存中有这么多活动对象。没有架构的自动更新。无论如何,类型化数据集对开发人员来说都是无用的,除了它给开发人员带来的舒适感。作为一个开发者,我们没有任何权利去dema