使用ORM可以使哪种Web开发项目受益?


10

首先,我说我已经使用SQL完成了95%的数据库工作。最近,我对各种ORM(例如NHibernate和Doctrine)进行了调查。

我可以看到不需要了解很多SQL和ORM提供的数据库可移植性的优点。但是我还可以看到,了解SQL将使使用ORM更加有效,而且我只能在职业生涯中一次想到,应用程序最大的改变就是数据库供应商。

因为我很舒服地编写SQL,并且显然没有意识到使用ORM的通常所教的好处,所以我对大量ORM用户的疑问是:

哪种Web开发项目从使用ORM中受益最大?


3
答案是“所有人”。但这可能不是您想知道的。您可能需要完善问题,以询问一些更具体的信息。
S.Lott

1
对我而言,SQL当前更易于生成,但这仅是由于我的适应(或无知)。我读过ORM并不总是最好的选择,因为它比普通的SQL慢。但是,许多开发人员表示这通常并不重要。我最好奇的是最适合ORM的项目。我可以看到大多数答案可能都是“全部”,这也很好。我不是在寻找特定的答案。:)
Fred Wilson

如果您不要求更多详细信息,则不会学到很多东西。
S.Lott

Answers:


5

(几乎)所有应用程序都将从ORM中受益。

首先,我不同意您为ORM列出的优势

  • 使用ORM不一定意味着您不需要了解SQL。具备SQL知识将有助于理解ORM工具的实际作用,这在调试期间特别有用。此外,实际上可能需要SQL来开发超出所选ORM功能的复杂查询。
  • 正如您所说,可移植性在现实生活中很少受到关注。

相反,ORM 的真正好处是:

  • ORM节省了程序员的时间,因为它节省了在SQL中编写大量CRUD逻辑的时间
  • 许多ORM包含复杂的缓存逻辑等,这些逻辑很难编写和调试。除了节省时间外,这还可以增强应用程序的可靠性和可维护性(或者至少可以节省您达到相同结果所需的时间)
  • 最好的ORM拥有积极开发,维护和支持产品的用户社区。围绕自定义SQL的社区充其量只是较少地关注我们需要解决的问题。

如您所言,ORM的缺点是性能下降。但是,这通常可以通过花费更多的硬件来抵消。

通常,与硬件相比,程序员的时间要贵得多,因此,ORM通常是一个不错的选择,而不是手工编写SQL。

ORM最适合具有大量相当简单的CRUD数据库逻辑的应用程序。ORM在以下方面不太有效

  • 几乎不需要数据库访问的应用程序。
  • 很大程度上依赖于复杂查询和很少简单CRUD逻辑的应用程序
  • 性能至关重要但无法部署更快的硬件的情况

以我的经验,这些情况很少见。因此,我的答案。


“使用ORM并不一定意味着您不需要了解SQL。” - 如此真实。我在团队环境中看到的优势之一是,我们可以集中SQL技能,这样,并不是每个从事业务层工作的开发人员都必须是专家。
Fred Wilson

1
对于复杂的查询,您始终可以恢复为SQL并编写SQL查询。
harsimranb 2015年

4

我也很喜欢编写SQL。我也完全不必编写任何SQL,也不必担心与数据库的连接,断开连接,池化等问题。

所以..我会回答你的问题的否定。唯一无法从ORM中受益的Web开发项目是完全不与数据库对话的项目。我认为是少数(如果有)。


+1:我也认为自己非常精通sql,但仍然更喜欢OR / M。实际上,我会说您绝对需要在sql上有一个句柄以充分利用OR / M,否则当抽象泄漏时,您将永远找不到问题。“不需要了解太多SQL”不是功能。对我来说,这完全是为了提高生产率,让编译器找到问题,而不是运行时,以及OR / M的问题(尤其是较新的泛型/基于Linq的泛型非常出色)。
布鲁克

@布鲁克-我完全同意。使用OR / M并不意味着SQL知识是可选的。
奥塔维奥·德西奥

2

根据我在ASP.NET WebForms上的经验,我建议使用有状态 Web框架的Web项目从使用ORM中获得最大收益。

使用有状态框架,将根据活动服务器控件的层次结构在后台自动生成标记。使这些控件自动加载并将它们的状态持久保存到数据库是很诱人的。这是ORM帮助的地方。

您可以将流水线的结尾(HTML输出)抽象化,并且自然地会以相同的方式处理开头(数据源),以便您只停留在应用程序代码中的业务逻辑中。

并不是说我并不是说这是做事的好方法。这是ORM自然适合的地方。


2

在具有大型,高度连接的对象模型的应用程序中,ORM使您不必一次又一次地编写相同的联接。

另一个好处是延迟加载,您希望api返回一个对象图,而api的客户端将仅使用该图的子集。


1

我相信您将ORM与DBAL混淆了

您所指的概念是数据库抽象层(DBAL),它允许您编写不依赖于基础数据库系统的可移植“ sql”。

另一方面,ORM((几乎?)总是建立在DBAL之上):

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. (维基百科)

简而言之,ORM允许您将数据从平面数据库转换为膨胀的对象表示。


谢谢你的澄清。我转向ORM的主要原因是,如果对某些项目有意义的话,则应将重点更多地放在OOP上,而不必编写太多SQL。
弗雷德·威尔逊

1

无法从ORM中受益的项目有:

  • 不是面向对象的;
  • 不需要持久化数据的数据;
  • 那些使用面向对象的数据库,因此不需要额外的映射层;
  • 使用无关系NoSQL解决方案的解决方案;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.