我真的需要 ORM 吗?

Posted

技术标签:

【中文标题】我真的需要 ORM 吗?【英文标题】:Do I really need an ORM? 【发布时间】:2010-04-30 07:28:09 【问题描述】:

我们即将开始开发一个中型 ASP.Net MVC 2 网站。对于典型的页面,我们抓取数据并将其扔到网页上,即在将数据发送到 UI 之前没有太多的预处理。

我们现在正在决定是否使用 ORM,如果是,使用哪一个。我们一直将 EF2 AKA EF4(VS 2010 中的 ASP.Net 实体框架)视为一种可能性。

但是,我认为在这种情况下一个简单的解决方案可能只是使用数据表。原因是我们不打算在获取数据后移动数据或对其进行大量处理,因此我不确定将强类型对象用作 DTO 是否有那么大的价值。此外,这种方式我们完全避免了映射,因此我认为可以简化代码并加快开发速度。

我应该提到预算是这个项目的一个问题,以及执行速度。我们力求在任何地方都尽可能简单,以减少预算、缩短时间和提高性能。

我们尚未完全决定这一点,但目前倾向于不使用 ORM。我们会接受无 ORM 方法还是值得使用 ORM?

【问题讨论】:

可能感兴趣:***.com/questions/18655/why-do-we-need-entity-objects 个人在您的页面中拥有可以简单地模拟的强类型对象,比必须模拟数据集之类的东西更容易测试。跨度> 【参考方案1】:

ORM 工具不是强制性的!

Jon 的建议是明智的,但我认为使用 DataTables 并不理想。

如果您使用的是 ORM 工具,那么对象模型要比成熟的 OO 域模型简单得多。此外,例如,Linq2Sql 和Subsonic 可以直接使用。允许在数据库更改时非常快速地更改代码。

您说您不会移动数据或对其进行大量处理,但是在 ORM 对象中而不是在 DataTables 中进行任何数量的处理都会容易得多。同样,如果应用程序发生变化并且需要更多处理,DataTable 解决方案将很脆弱。

【讨论】:

【参考方案2】:

如果你不打算练习全面的面向对象编程(我的意思是你应该对 OOP 有非常深刻的理解,而不仅仅是脱口而出原则和设计模式名称的能力)那么不,它是不值得购买 ORM。

只有当您的组织完全投入到面向对象的应用程序设计中并且因此存在对象到关系模型映射的问题时,ORM 才有用。如果您没有完全融入 OO,ORM 将成为某种令人讨厌的障碍,您的组织会觉得它不需要。

如果您的团队/组织的编程风格一直倾向于将业务逻辑保留在数据库中(例如,存储过程)或在编写对象和方法时坚持使用或多或少的功能/过程/静态方法,请取消 ORM 和坚持使用 ADO.NET。

【讨论】:

【参考方案3】:

听起来好像你只需要显示数据而不做 CRUD。

我发现在显示包含来自不同表的数据的列表时,ORM 并不是最好的方法。您最终加载大型对象图只是为了获得这个需要的字段。

SQL 语句在这方面要好得多。 我仍然会从 DAL 返回强类型对象的列表。这样,当 DAL 中的更改未反映在其他层中时,您更有可能获得编译时错误。

【讨论】:

【参考方案4】:

如果您已经拥有所需的存储过程,那么从 ORM 中可能不会有太多好处。如果不是,尽管我的经验是,使用 Linq to Entites 比使用传统的存储过程/强类型数据集方法要快得多,前提是您对 Linq 查询感到满意。

如果您不担心映射到对象模型,那么 Linq to SQL 使用起来更加简单。您当然不需要使用完整的 OO 模型来获得生产力优势。

它不同意 Malcolm 关于必须带回图表的观点,如果 ORM 支持 Linq,您可以使用投影返回带有您想要的数据的平面结果,并且查询通常比相应的 SQL 更简单因为你可以使用关系而不是加入。

切换并熟悉该技术后,我认为这几乎没有不使用的充分理由,如果您真的需要,它们都支持回退到 SQL 存储过程。不过会有一个学习曲线,在这种情况下,这可能会让你不值得花时间。

【讨论】:

【参考方案5】:

我同意 Joe R 的建议 - 对于进行更改的速度以及初始开发的速度,LINQ-to-SQL 或 subsonic 将让您立即上手。

如果您的应用程序真的这么简单,而且它只是一个直接的数据输出/直接映射到表的数据,您是否考虑过查看ASP.net dynamic data?

我还要指出一个很好的 article Scott Guthrie。

【讨论】:

【参考方案6】:

这在很大程度上取决于您对 ORM 的熟悉程度。

我个人认为 NHibernate 是 .NET 世界中的 ORM 之王,它允许更快的开发,因为一旦设置,您几乎可以忘记如何从数据库中获取数据。

但是,它有一个陡峭的学习曲线,特别是如果你尝试以一种非 hacky 的方式做事(你应该这样做),所以如果你的团队在这方面没有经验并且时间紧迫,那么它可能不会剪的。

Linq2SQL 太简单了。不了解 Subsonic,但如果您打算使用 ORM,它可能会在快速开发和获得过于强大和复杂的东西之间取得良好的平衡。

但最终,作为一个团队,我认为你想学习 NHibernate,一旦你知道自己在做什么,它在中小型项目上设置并不费时,但它非常强大。

【讨论】:

以上是关于我真的需要 ORM 吗?的主要内容,如果未能解决你的问题,请参考以下文章

这在 Django ORM 中真的不可能吗?

表的 ORM 和前缀

使用 Eloquent ORM 时是不是需要在数据库级别维护外键?

ORM 原则中写入和读取日期时间的问题

GraphQL 是 ORM 吗?

页面代码压缩真的需要吗?