首先,我说我已经使用SQL完成了95%的数据库工作。最近,我对各种ORM(例如NHibernate和Doctrine)进行了调查。
我可以看到不需要了解很多SQL和ORM提供的数据库可移植性的优点。但是我还可以看到,了解SQL将使使用ORM更加有效,而且我只能在职业生涯中一次想到,应用程序最大的改变就是数据库供应商。
因为我很舒服地编写SQL,并且显然没有意识到使用ORM的通常所教的好处,所以我对大量ORM用户的疑问是:
哪种Web开发项目从使用ORM中受益最大?
首先,我说我已经使用SQL完成了95%的数据库工作。最近,我对各种ORM(例如NHibernate和Doctrine)进行了调查。
我可以看到不需要了解很多SQL和ORM提供的数据库可移植性的优点。但是我还可以看到,了解SQL将使使用ORM更加有效,而且我只能在职业生涯中一次想到,应用程序最大的改变就是数据库供应商。
因为我很舒服地编写SQL,并且显然没有意识到使用ORM的通常所教的好处,所以我对大量ORM用户的疑问是:
哪种Web开发项目从使用ORM中受益最大?
Answers:
(几乎)所有应用程序都将从ORM中受益。
首先,我不同意您为ORM列出的优势。
相反,ORM 的真正好处是:
如您所言,ORM的缺点是性能下降。但是,这通常可以通过花费更多的硬件来抵消。
通常,与硬件相比,程序员的时间要贵得多,因此,ORM通常是一个不错的选择,而不是手工编写SQL。
ORM最适合具有大量相当简单的CRUD数据库逻辑的应用程序。ORM在以下方面不太有效:
以我的经验,这些情况很少见。因此,我的答案。
我也很喜欢编写SQL。我也完全不必编写任何SQL,也不必担心与数据库的连接,断开连接,池化等问题。
所以..我会回答你的问题的否定。唯一无法从ORM中受益的Web开发项目是完全不与数据库对话的项目。我认为是少数(如果有)。
根据我在ASP.NET WebForms上的经验,我建议使用有状态 Web框架的Web项目从使用ORM中获得最大收益。
使用有状态框架,将根据活动服务器控件的层次结构在后台自动生成标记。使这些控件自动加载并将它们的状态持久保存到数据库是很诱人的。这是ORM帮助的地方。
您可以将流水线的结尾(HTML输出)抽象化,并且自然地会以相同的方式处理开头(数据源),以便您只停留在应用程序代码中的业务逻辑中。
并不是说我并不是说这是做事的好方法。这是ORM自然适合的地方。
我相信您将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允许您将数据从平面数据库转换为膨胀的对象表示。