对于我开发的某些应用程序(后来逐渐忘记了),我一直在编写纯SQL,主要是针对MySQL。尽管我在SQLAlchemy之类的python中使用过ORM,但是我并没有坚持很长时间。通常,这是文档或复杂性(从我的角度来看)使我退缩。
我这样看:如果要使用一种类型的数据库,则使用ORM进行可移植性,使用普通SQL。我真的在寻求有关在开发需要数据库支持的应用程序时何时使用ORM或SQL的建议。
考虑一下,与使用ORM相比,仅使用轻量级包装器来处理数据库不一致会更好。
ORM具有一些不错的功能。他们可以处理将数据库列复制到对象字段的繁琐工作。他们通常负责将语言的日期和时间类型转换为适当的数据库类型。它们通常还可以通过实例化嵌套对象来相当优雅地处理一对多关系。我发现如果您在设计数据库时考虑到了ORM的优点和缺点,那么在将数据移入或移出数据库时可以节省很多工作。(如果需要映射它们,您将想知道它如何处理多态性和多对多关系。正是这两个域提供了大多数“阻抗不匹配”,这使得有些人将ORM称为“计算机科学的越南”。 )
对于事务性应用程序,即您发出请求,获取一些对象,遍历它们以获取一些数据并将其呈现在Web页面上,性能负担很小,并且在许多情况下,ORM可以更快,因为它将缓存对象。如前所述,否则将多次查询数据库。
对于报表繁重的应用程序,或每个请求要处理大量数据库行的应用程序,ORM负担要重得多,并且它们所做的缓存会变成很大的无用的内存消耗负担。在这种情况下,精简DAL中的简单SQL映射(LinQ或iBatis)或手工编码的SQL查询就是解决之道。
对于任何大型应用程序,我都发现您会同时使用这两种方法。(ORM用于简单的CRUD,而SQL / thin DAL用于报告)。