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

时间:2020-03-05 18:50:29  来源:igfitidea点击:

我来自一个喜欢建立自己的世界,而不是依赖他人构建的库和框架的世界。逃避这个世界之后,我发现在Visual Studio中使用诸如Typed DataSets之类的工具既轻松又有趣。那么,除了失去灵活性之外,我们还会失去什么呢?是否存在性能因素(不考虑proc与动态sql的争论)?局限性?

解决方案

回答

与未类型化的数据集相比,类型化的数据集可提高性能(尽管我从未发现诸如此类值得琐碎的事情带来的性能问题)。

我会说最大的麻烦就是让它们与数据库保持同步-我不能说VS 2008,但是以前的版本对此不提供良好的支持。每当结果集的架构发生更改时,我都会将procs实际上拖到设计器上。不好玩。

但是,我们确实可以进行编译时类型检查,这很不错,例如Customer.Name而不是Dataset.Tables(0).Rows(0)(" Name")。

因此,如果模式是相对静态的,则可能值得这样做,但是否则,我不会打扰。

我们也可以研究一个真正的ORM。

回答

类型化数据集没有错。它们并不完美,但是这是解决对象关系阻抗不匹配问题的下一步。我面临的唯一问题是对架构更改的支持不足。局部类可以提供帮助,但并非在每种情况下都可以提供帮助。

回答

我只给了Typed Datasets一个很短的尝试。当我发现我的代码在生成的代码的1,000多个行文件中破坏了大约2/3的方式时,我停了下来。

我不喜欢的另一件事是我认为我应该编写诸如Customer.Name之类的代码,但是默认情况下,我似乎得到诸如CustomerDataSet.Customers [0] .Name之类的代码,其中,Customers [0]的类型为CustomerRow 。与未类型化的数据集相比,它的可读性仍然更好,但实际上并不是我所寻找的语义。

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

回答

我要提出的主要批评是它们无法很好地扩展-与轻量级业务实体或者DTO或者LINQ to SQL相比,当我们获得更多事务时,由于开销而导致性能下降。架构更改也令人头疼。对于"工业实力"架构,它们可能不是路要走,从长远来看,它们会引起问题。

我仍然可以肯定地将它们用于快速,肮脏的PoC或者简单的实用程序-使用Visual Studio中的工具,它们确实非常方便使用,并且可以完成工作。

回答

到目前为止,类型化数据集是对经典ADO断开记录集的升级。我发现在需要执行面向行的排序任务的简单情况下,它们仍然很好用。我们仍然希望在行,列,约束等数据库范式的上下文中工作。如果在这种情况下明智地使用,那么我们就可以了。

在某些方面,其收益会减少:

  • 我认为这里提出的同步问题绝对是一个问题,尤其是如果我们已经离开并对其进行了自定义或者将它们用作基类。
  • 根据数据集中数据表的数量,它们可能变得很胖。我的意思是,多表数据集通常表示数据的关系视图。除了内存占用空间之外,随之而来的是键的定义和可能的其他约束。再说一次,如果那是我们所需要的,但是如果我们需要一次快速遍历数据,那么使用数据读取器进行有效循环可能是更好的选择。
  • 由于它们复杂的定义和潜在的大小,因此不建议在远程情况下使用它们。
  • 最后,当我们开始意识到需要在与问题域相关的对象中使用数据时,对它们的使用成为更多的障碍而不是好处。我们会不断发现自己将字段移入和移出集合中的行表,并使自己与表和行的状态有关。我们开始意识到它们使面向对象的语言变得更易于表示现实世界中的问题域对象,并且使用表,行和列实际上并不适合这种思维方式。

通常,根据我的经验,我发现复杂的系统(例如,许多大型企业系统)最好不再使用数据集,而转而使用特定于实体域的对象模型-如何将数据从这些对象中取出和取出(举例来说,使用ORM是另一个对话主题。但是,在小型项目中,需要先对表格进行基本维护和其他一些简单操作的表格,使用数据集范式可以实现很高的生产率,尤其是与Visual Studio / .Net强大的数据绑定功能结合使用时。

回答

如果忽略了前面提到的所有问题,则数据集非常适合与Visual Studio一起快速拍打。我没有提到的一个问题是Visual Studio设计图面内数据集的可视可伸缩性。随着系统的发展,数据集的大小不可避免地变得笨拙。设计师的视觉方面根本无法扩展。当数据集包含约20个以上的表时,四处滚动以尝试查找特定的表或者关系确实是一个痛苦。

回答

我不是打字数据集的忠实拥护者。我无法使用类型化的数据集来提高性能。它纯粹是对现有数据库对象的包装。我不能考虑像employee.empName这样的访问。投射仍在包装器中完成。另一个开销是大量的代码。 LOC增加。内存中有许多活动对象。没有自动更新架构。无论如何,类型化数据集除了给开发人员带来的便利之外,对开发人员没有用。作为开发人员,我们没有任何权利要求舒适感:)承受痛苦……让使用者摆脱痛苦:)