【问题标题】:.NET Dataset vs Business Object : Why the debate? Why not combine the two?.NET 数据集与业务对象:为什么要争论?为什么不将两者结合起来?
【发布时间】:2010-11-17 22:06:45
【问题描述】:

我在 cmets here (current live site, without comments) 中阅读了一场辩论。

为什么要辩论?对我来说,数据集就像一个关系数据库,一个对象是一个类似层次结构的模型。为什么人们绝对想要一个“纯”对象模型,而我们仍然处理关系数据库,那么为什么不将两者结合起来呢?

如果我们应该这样做,是否有任何轻量级、综合性的框架可以让我们做到这一点(而不是像 NHibernate 这样具有巨大学习曲线的笨重的庞然大物)?

【问题讨论】:

  • 你可能晚了 5 年才会对此感到兴奋......

标签: orm ado.net dataset


【解决方案1】:

“纯对象”更容易使用,类型化对象为您提供智能感知和编译时类型检查。

使用裸数据集非常麻烦且烦人 - 您需要知道列名,无法进行类型检查,因此如果您输入错误的列名,您就很不走运了,直到您才发现错误运行时(最坏的情况)。

类型化数据集是朝着正确方向迈出的一步,但是您在 .NET 代码中使用的“事物”仍然与您的数据库实现紧密相连——这通常不是一件好事,因为底层的任何变化数据库可能会影响您的应用程序直至您的 UI,并导致需要进行大量更改。

使用像 NHibernate 这样的 ORM 可以让您更好地将数据库(物理存储)层从逻辑业务模型中抽象出来并解耦 - 只有在最简单的场景中,这两者才能精确地 1:1 匹配,所以您需要无论如何,两者之间存在某种“翻译”或映射。

总而言之,对于小型、简单的应用程序来说,使用类型化数据集可能没问题,但对于具有挑战性的、大规模的企业级业务应用程序,我绝不建议将您的业务对象模型如此紧密地耦合到数据库。

马克

【讨论】:

    【解决方案2】:

    为什么人们绝对想要“纯”对象模型

    因为您不希望您的应用程序依赖于数据库架构

    【讨论】:

      【解决方案3】:

      嗯,您给出的所有理由都与过去为 Java 中的 EJB 提供的学术理由相同,这在过去是一团糟。那么人们不是又陷入了另一种时尚炒作吗?

      正如我在这里读到的: http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx

      承诺是一回事,现实是另一回事。

      索赔的证据在哪里?

      从科学上讲,复杂性与熵的概念紧密相关,你不能降低事物固有的复杂性,你可以把它移到其他地方,所以对我来说,这从根本上来说是不合理的。

      【讨论】:

      • 是的,当然 - 你不能神奇地让复杂性消失 - 但是使用清晰的分层方法和支持它的工具(OR-mappers),你可以让它更易于管理。它仍然很复杂 - 但如果您可以独立于另一层更改一层,您可以更好地管理它。对于有类型或无类型的数据集,数据库中的单个更改可能会导致整个应用程序崩溃 - 去过那里,看到过 - 相信我。
      • Ted Neward 关于 ORM 是“计算机科学的越南”的博文引起了极大的争议 - 我完全不同意他在其中所说的话。所以你不能把它当作证据或事实——这是他的观点,他完全有权——很多其他人有不同的观点,并且比我能更好地表达这些观点
      • 但是嘿 - 没有什么也没有人阻止你走出去并在你的应用程序中使用类型化的数据集。许多其他人都这样做了——或多或少成功,或多或少有维护痛苦——但如果你觉得这种方法更舒服,一定要使用它!
      【解决方案4】:

      Ted Newards 备受争议,因为在我看来,每个人都像在旧的 EJB 时代一样从众:在 Rod Johnson 退出 Hibernate 之前,没有人敢说 EJB 很烂。

      现在似乎没人愿意说像 Hibernate、Entity Framework 等 ORM 框架太复杂了,因为可能还没有另一个 Rod Johnson II :)

      你假装添加一个新层可以解决问题,即使在理论上也并非总是如此,例如当项目变得一团糟时添加更多团队成员,因为添加更多程序员也意味着增加协调和沟通问题。

      在实践中,至少从 GUI 的角度来看,应该独立的层实际上并非如此。我看到很多人在使用 ORM 时很难在 GUI 中做一些简单的事情。

      【讨论】:

      • 不,我不是说添加层可以解决问题 - 它使它易于管理
      • 而且我看到很多人在他们的 GUI 中苦苦挣扎,因为他们使用非常直接、非常直接的数据库链接,任何一点机会都会破坏他们的 GUI........
      • 每种解决方案各有利弊 - 选择您喜欢的并使用它。
      • 如果您不想使用,没有人会强迫您使用 ORM。但是很多人已经在直接数据集上构建系统并遭受维护痛苦和噩梦,并选择了另一条路径。
      • 我不明白你为什么说使用数据集是 GUI 到数据库的直接链接,因为数据集是一个与物理数据库隔离的层,你可以通过将连接字符串放在配置文件。
      猜你喜欢
      • 2011-12-21
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      相关资源
      最近更新 更多