ORM与手工编码数据访问层

ORM与手工编码数据访问层,orm,data-access,Orm,Data Access,我有点害怕问这个问题,因为它可能会引发一场宗教战争,所以我想真正弄清楚我在寻找什么。我正在寻找一个(s)的原因,为什么你会或已经跳一个或另一个方式,也为项目添加到我的名单。我在找大票,大爆炸的东西。此外,如果某个产品的特定项目确实相关,则可能是这些项目。在这一点上,我试图评估ORM与手动,而不是产品A与产品B ORM优势 - Quick to code and low maintenance (in some/most scenarios) - Additional features for

我有点害怕问这个问题,因为它可能会引发一场宗教战争,所以我想真正弄清楚我在寻找什么。我正在寻找一个(s)的原因,为什么你会或已经跳一个或另一个方式,也为项目添加到我的名单。我在找大票,大爆炸的东西。此外,如果某个产品的特定项目确实相关,则可能是这些项目。在这一点上,我试图评估ORM与手动,而不是产品A与产品B

ORM优势

- Quick to code and low maintenance (in some/most scenarios) - Additional features for "free" (no developer effort) - More Efficient (at runtime, maybe not at dev time?) - Less layers of complexity - Most ORMS seem to struggle with being retricted to sprocs only -快速编码和低维护(在某些/大多数情况下) -“免费”的附加功能(无需开发人员的努力) 手工编码的优势

- Quick to code and low maintenance (in some/most scenarios) - Additional features for "free" (no developer effort) - More Efficient (at runtime, maybe not at dev time?) - Less layers of complexity - Most ORMS seem to struggle with being retricted to sprocs only -更高效(在运行时,可能不是在开发时?) -更少的复杂层次 -大多数ORM似乎都在苦苦挣扎,只能被施暴报复 为了充分披露,我真的不喜欢对我的数据库执行“某些东西”的想法,如果我认为合适的话,我不能直接修改这些代码,但我可以看到ORM潜在的大量开发时间建议

也许值得一提的是,我身处一个.Net世界

[编辑] (上的问题似乎回答了许多问题,并强化了关于绩效的观点)

所以,稍微改变一下我的问题

有没有人在早期阶段使用ORM构建应用程序,然后逐渐用手工编码的DAL替代?这种方法的陷阱是什么

[进一步编辑-现在进入问题的核心]
有一个网站能够对我的数据库执行任何SQL是可怕的。如果所有的访问都是通过存储过程进行的,那么我的数据库将处于良好、安全、舒适的隔离状态。仅使用存储过程可以消除很多(如果不是全部的话)SQL注入攻击向量。对此有何评论?

几年来,我一直在努力解决这个问题。看了很多东西。在过去的三个月里,我意识到“为什么我要把所有的时间都浪费在这上面”。我认为ORM是一个已经解决的问题。我宁愿相信一些完全专注于ORM的团队来编写ORM层,而不是我。精神上,我已经准备好迎接新的挑战

我的选择是NHibernate。我现在真的是个新手。但我也喜欢使用Fluent NHibernate或Castle ACtiveRecord。这似乎是思想共享的地方


但我不确定在一个“一切都是疯狂”的世界里我会做什么

几周前,我开始开发一个新项目。我可以完全控制我可以使用的工具。我从db40开始,因为我想完全消除这个问题;我只是想直接持久化我的对象,忘记ADO.NET或/M。但是db40有问题,所以我不得不放弃它

我的下一个选择是ADO.NET,因为我认为它将是快速和简单的。但我不得不编写太多的代码,使用太多的“字符串sql”,这完全是一件琐事。我的意思是,这是一个皇家皮塔,在用它编写了两个存储库之后,我想割腕

我的第三个选择是NHibernate。我以前在需要使用断开连接的对象的情况下遇到过NHibernate的问题(这次也是这样,因此我花了三次尝试才找到它)。但这是NHibernate1.2。这次我得到了2.0二进制文件,在更新断开连接的对象时没有任何问题。我还必须编写更少的代码行,当我需要重构东西时,它非常简单,这可能是最重要的,因为我的设计变化很快

我现在被NHibernate出卖了。它看起来也是高度优化的。老实说,我找不到消极的一面。而且没有存储过程


我知道这是我未来的OR/M选择,我再也不会直接编写ADO.NET了

您不需要放弃存储过程,也不需要使用像nHibernate这样的好ORM手工编写SQL


事实上,我已经更换了我的ORM数据访问方法,这一点都不难,这是两全其美。

我们最初使用JPA编写了一个应用程序,从它投入生产的那一天起,我们就后悔了。ORM进行的数据库调用数量是天文数字,因此我们现在已经开始利用Spring的JDBC助手类,使用老式JDBC重写应用程序。从ORM开始的缺点是,我们花了大量时间学习JPA,最后我们不得不用JDBC替换它,这样我们的应用程序就可以更具可扩展性,而无需向Oracle RAC添加3个其他节点。因此,如果平衡一下,JDBC的控制和精度值得您编写额外的代码行。此外,大多数人不理解SQL不是可以生成并期望执行的东西。这是必须编写和调整以获得最大性能的东西。

我已经编写和维护自己的ORM 8年了。它从Java开始,然后翻译成C。我无法想象在没有它的情况下编写任何数据库支持的系统。它比NHibernate简单得多,并没有它的所有特性,但它完成了任务,而且速度相当快,即使它广泛使用反射,因为它用DAO类定义上的反射替换XML配置

我对此很满意,不会使用任何其他方法


编辑:关于SQL注入攻击:我最近使用这个ORM开发的一个系统经过了广泛的审核,绝对不允许注入。原因很简单:它动态生成SQL,并且总是使用参数,没有字符串连接。

我在个人项目中使用了Castle Project的活动记录实现和NHibernate。该项目从未部署,部分原因是我无法使用我选择的ORM

我决定使用ORM的原因是,我希望能够在不更改代码的情况下从SQL Server切换到MYSQL。在实际项目中,使用SQL server的决定已经为我做出了,只需在传统的3-t中编写数据层就更容易了