在我的学徒生涯中,我在一些较小的项目中使用过NHibernate,这些项目大多是我自己编写和设计的。现在,在开始一些更大的项目之前,讨论开始了如何设计数据访问以及是否使用ORM层。因为我还处于学徒阶段,仍然认为自己是企业编程的初学者,所以我并没有真正尝试推动我的观点,即使用数据库的对象关系映射器可以大大简化开发。开发团队中的其他程序员比我更有经验,所以我想我会照他们说的做。:-)
但是,我不完全理解不使用NHibernate或类似项目的两个主要原因:
一个人可以使用查询建立自己的数据访问对象,并将这些查询从Microsoft SQL
所以,我当然可以用很多SELECT
等等来构建我的数据访问层,但是在这里,我错过了自动连接、延迟加载代理类以及在表获得新列或列被重命名时维护工作量较低的优点。(更新大量的SELECT
、INSERT
和UPDATE
查询,而不是更新映射配置和重构业务类和DTO。)
此外,如果您不太了解框架,使用NHibernate可能会遇到无法预见的问题。例如,可以信任Table.hbm.xml,在该set中设置要自动验证的字符串的长度。但是,我也可以想象在基于“简单”SqlConnection查询的数据访问层中出现类似的错误。
最后,上面提到的这些论点真的是一个不使用ORM的好理由吗?他们/我可能遗漏了其他论点吗?
(我可能应该补充一点,我认为这是第一个需要团队合作的基于.NET/C#的“大型”应用程序。在Stack Overflow上被视为非常正常的良好实践,例如单元测试或持续集成,到目前为止在这里还不存在。)
发布于 2008-10-11 14:55:33
近年来,ORM出现了爆炸性的增长,您的更有经验的同事可能仍然在考虑“每个数据库调用都应该通过存储过程”的心态。
为什么ORM会使调试变得更加困难?无论它来自存储的proc还是ORM,您都会得到相同的结果。
我想,对于ORM,我能想到的唯一真正的坏处就是它的安全模型不太灵活。
我刚刚重读了你的问题,看起来他们正在复制并粘贴查询到内联中。这使得安全模型与ORM相同,因此与ORM相比,这种方法没有任何优势。如果他们使用非参数化的查询,那么这实际上是一个安全风险。
发布于 2008-10-11 15:12:17
简而言之,答案是肯定的,确实有很好的理由。事实上,在某些情况下,您就是不能使用ORM。
举个例子,我在一家大型企业金融机构工作,我们必须遵循许多安全指南。为了满足强加给我们的规章制度,通过审计的唯一方法是将数据访问保持在存储过程中。使用ORM工具意味着工具/开发人员可以插入、选择、更新或删除任何他或她想要的东西。存储过程提供了更多的安全性,尤其是在处理客户端数据的环境中。我认为这是需要考虑的最大原因。安全系统。
发布于 2010-07-07 23:29:15
ORMs的甜蜜点:
ORM对于在适用的情况下自动化查询的95%+非常有用。它们的特别之处在于,您拥有一个具有强大对象模型体系结构的应用程序,以及一个能够很好地处理该对象模型的数据库。如果你正在做一个新的构建,并且在你的团队中有很强的建模技能,那么你可能会用ORM得到很好的结果。
您可能有一些查询最好是手工完成的。在这种情况下,不要害怕编写一些存储过程来处理这个问题。即使您打算将应用程序移植到多个DBMS平台上,依赖于数据库的代码也只占少数。请记住,您需要在任何想要支持它的平台上测试您的应用程序,一些存储过程的一点额外移植工作不会对您的TCO产生太大影响。对于第一个近似值,98%的可移植性与100%可移植性一样好,而且远远好于复杂或性能低下的解决方案,以绕过ORM的限制。
我已经看到前一种方法在一个非常大的(100多年的员工) J2EE项目中工作得很好。
ORM可能不是最合适的的
在其他情况下,可能有比ORM更适合应用程序的方法。Fowler的企业应用程序架构模式有一个关于数据访问模式的部分,它很好地对各种方法进行了分类。我见过的一些ORM可能不适用的情况示例如下:
无关
https://stackoverflow.com/questions/194147
复制相似问题