有充分的理由不使用 ORM 吗? [关闭]

2024-01-06

在我的学徒期间,我使用过NHibernate http://nhibernate.org/对于一些较小的项目,这些项目主要是我自己编码和设计的。现在,在开始一些更大的项目之前,讨论了如何设计数据访问以及是否使用 ORM 层。由于我仍处于学徒期,并且仍然认为自己是企业编程的初学者,因此我并没有真正尝试推动我的观点,即使用数据库的对象关系映射器可以大大简化开发。开发团队中的其他程序员比我更有经验,所以我想我会按照他们说的去做。 :-)

然而,我并不完全理解不使用 NHibernate 或类似项目的两个主要原因:

  1. 人们可以使用 SQL 查询构建自己的数据访问对象,并将这些查询复制到 Microsoft SQL Server Management Studio 之外。
  2. 调试 ORM 可能很困难。

所以,当然我可以用很多东西来构建我的数据访问层SELECT等,但在这里我错过了自动连接、延迟加载代理类的优点,以及在表获得新列或重命名列时较低的维护工作量。 (更新众多SELECT, INSERT and UPDATE查询与更新映射配置以及可能重构业务类和 DTO。)

另外,如果您不太了解 NHibernate 框架,那么您可能会遇到无法预见的问题。例如,这可能是信任 Table.hbm.xml,您在其中设置要自动验证的字符串长度。然而,我也可以想象在基于“简单”SqlConnection 查询的数据访问层中存在类似的错误。

最后,上面提到的这些论点真的是不将 ORM 用于基于数据库的企业应用程序的好理由吗?他们/我可能错过了其他论点吗?

(我可能应该补充一点,我认为这就像第一个基于 .NET/C# 的“大型”应用程序,需要团队合作。良好的实践在 Stack Overflow 上被视为非常正常,例如单元测试或持续集成,但它们并不适用。 -到目前为止还存在。)


简短的回答是肯定的,确实有充分的理由。事实上,在某些情况下您无法使用 ORM。

举个例子,我在一家大型企业金融机构工作,我们必须遵循很多安全准则。为了满足我们的规则和规定,通过审核的唯一方法是将数据访问保留在存储过程中。现在有些人可能会说这简直是愚蠢的,但老实说事实并非如此。使用 ORM 工具意味着工具/开发人员可以插入、选择、更新或删除他或她想要的任何内容。存储过程提供了更高的安全性,特别是在处理客户端数据的环境中。我想这是最值得考虑的原因。安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有充分的理由不使用 ORM 吗? [关闭] 的相关文章

随机推荐

  • Django 模型和表单有什么区别?

    我是 Django 新手 无法理解模型和表单 任何人都可以向我建议与它们相关的差异和教程吗 基本上 模型封装了有关某事物的信息 即 它models它 并存储在数据库中 例如 我们可以模拟一个人 from django import mode
  • 以这种方式传递参数意味着什么?

    我正在学习 javascript 我看到了我不理解的这段代码 exports configure expressapp null userdb null path myroute gt handle routes 我对传入参数的结构以及内部
  • NavigationBar setShadowImage 并不总是有效

    我试图在表格视图中为导航栏设置自定义阴影图像 但它仅显示在某些视图中 我创建了一个超类来设置表视图的样式 void viewDidLoad super viewDidLoad Set navigation bar background se
  • 在 TensorFlowdynamic_rnn 中使用sequence_length参数时如何处理填充

    我正在尝试使用dynamic rnnTensorflow 中的函数可加快训练速度 经过一些阅读后 我的理解是加速训练的一种方法是显式地将值传递给sequence length该函数中的参数 经过更多阅读后 发现this https stac
  • 如何在 Android Kitkat 中设置默认短信应用程序?

    我制作了一个 Android 短信应用程序 在其中我可以像 Android 消息应用程序一样发送和接收短信 现在我已将目标设置为 4 4 Android KitKat 版本 但 Android KitKat 具有新的 默认消息传递 应用程序
  • 如何在python中发出post请求

    这是卷曲命令 curl H X API TOKEN
  • Boost Log 的琐碎记录器的“惰性求值”是如何工作的?

    跟进明确检查 boost log 过滤器 https stackoverflow com a 50345102 9305398 以下示例使用来自的简单记录器升压日志 https www boost org doc libs master l
  • 如何从 int 转换为 char*?

    我知道的唯一方法是 include
  • 将 JSON 文件导入 Windows 10 上的 Postgresql 11

    我有一个 JSON 文件 C sensors 201802091904 json 该数据文件与 PostgreSQL 安装位于同一本地驱动器上 以下是 JSON 的示例 Data collection of property value p
  • 在 Blackberry Playbook 模拟器中打开 .bar 文件

    您好 我有一个早期版本的 Playbook 应用程序 是我们的一位开发人员在 Flash Builder 中为我们制作的 它是一个 bar 文件 我已经安装了所有必需的 Abode 和 RIM SDK 密钥和模拟器 并且可以在 Flash
  • 如何创建从其他几个组件继承的Delphi组件?

    我发现有关如何创建 delphi 组件的教程很好 但它们只使用现有组件之一作为继承操作的对象 像这样的东西 unit CountBtn interface uses Windows Messages SysUtils Classes Gra
  • 重命名属性名称并更改多个对象的值

    在下面的对象中 我想更改属性名称 thumb to thumbnail 我还想更改的值title包括 span tags 这是我的对象 var data thumb images 01 png title My title thumb im
  • 带键的数组的 Twig for 循环

    我使用 Twig 并且有一个带有如下键的数组 array 1 alpha array 2 bravo array 3 charlie array 8 delta array 9 echo 我想拿到钥匙 1 2 3 8 9 和内容 alpha
  • 无效操作异常

    我创建了一个 WCF 服务 在 IIS 上托管时运行良好 现在 我采用了相同的服务 并在 WPF 中创建了一个主机应用程序 当尝试从该应用程序启动该服务时 出现以下异常 The HttpGetEnabled property of Serv
  • 与 KeyValuePair 键上的列表相交?

    如何根据键插入两个键值对列表 我努力了 List
  • jQuery UI Accordion - 如何完全删除样式?

    我喜欢 jQuery 手风琴 http jqueryui com demos accordion 的功能 但是我不想要这种风格 我想摆脱所有的样式 img 边框 颜色等 我没有看到这个选项 这是他们应该添加的内容 还是我误会了 您可以制作自
  • linux下c语言蓝牙编程

    我正在尝试在 linux ubuntu 中运行基本的 c 代码来搜索蓝牙设备 但我遇到了一些问题 通过使用命令sudo apt get install bluez 要安装所需的blueZ库 说明bluez已经是最新版本了 但出现错误 无法找
  • PHP 正则表达式查找自定义添加的 HTML 标签之间的文本

    我有以下场景 Got an HTML模板将用于的文件mailing 这是一个简化的示例 table tr td Heading 1 td td heading 2 td tr table
  • http.sys 实现

    我们都知道有一个名为 http sys 的二进制文件内核模式驱动程序在我们的 Windows 中 它为我们进行 HTTP 处理 这基本上就是我们所知道的一切 但今天我想 嘿 我们所有的网络东西 比如 TCP IP 之类的东西都在这里 在用户
  • 有充分的理由不使用 ORM 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi