如果您要激励为什么要使用ORM来管理/客户的“优点”,原因是什么?
尝试使每个答案保持一个原因,以便我们可以将投票结果视为最佳原因
如果您要激励为什么要使用ORM来管理/客户的“优点”,原因是什么?
尝试使每个答案保持一个原因,以便我们可以将投票结果视为最佳原因
Answers:
使数据访问更加抽象和可移植。ORM实现类知道如何编写特定于供应商的SQL,因此您不必这样做。
使用ORM的最重要原因是,您可以拥有一个丰富的,面向对象的业务模型,并且仍然能够存储它并针对关系数据库快速编写有效的查询。从我的角度来看,与您可以编写的高级查询类型相比,优质的ORM与其他生成的DAL相比,没有任何真正的优势。
我正在考虑的一种查询类型是多态查询。一个简单的ORM查询可能会选择数据库中的所有形状。您会得到一系列形状。但是根据其区分符,每个实例都是正方形,圆形或矩形。
另一种查询类型是在单个数据库调用中急于获取一个对象以及一个或多个相关对象或集合的查询。例如,返回每个形状对象,并填充其顶点和边集合。
很抱歉在这里与其他许多人不同意,但是我不认为代码生成本身就是与ORM一起使用的充分理由。您可以为代码生成器编写或找到许多不错的DAL模板,这些模板没有ORM的概念或性能开销。
或者,如果您认为不需要知道如何编写好的SQL来使用ORM,那么我也不同意。从编写单个查询的角度来看,依靠ORM更容易。但是,使用ORM,当开发人员不了解其查询如何与ORM及其转换成的SQL一起工作时,创建性能差的例程太容易了。
拥有适用于多个数据库的数据层可能是一个好处。不过,这不是我不得不经常依靠的人。
最后,我必须重申,根据我的经验,如果您不使用ORM的更高级的查询功能,那么还有其他选项可以解决剩余的问题,而这些问题的学习量较少,CPU周期也较少。
哦,是的,有些开发人员确实发现与ORM一起工作很有趣,因此从让开发人员满意的角度来看,ORM也很不错。=)
加快发展。例如,消除重复代码,例如将查询结果字段映射到对象成员,反之亦然。
在数据访问层中支持业务规则的OO封装。您可以使用首选的应用程序语言编写(和调试)业务规则,而不是笨拙的触发器和存储过程语言。
生成基本CRUD操作的样板代码。某些ORM框架可以直接检查数据库元数据,读取元数据映射文件或使用声明性类属性。
您可以轻松迁移到其他数据库软件,因为您正在开发抽象。
我正在研究它的原因是为了避免从VS2005的DAL工具(模式映射,TableAdapter)生成的代码。
我一年多以前创建的DAL / BLL(对于我为其构建的产品)运行良好,直到其他人开始使用它来利用某些生成的功能(我不知道那里有没有)
与http://wwww.asp.net的DAL / BLL解决方案相比,它看起来将提供一种更加直观,更简洁的解决方案。
我当时正在考虑创建自己的SQL Command C#DAL代码生成器,但ORM看起来是一个更优雅的解决方案
查询的编译和测试。
随着ORM工具的改进,通过编译时错误和测试更容易更快地确定查询的正确性。
编译查询有助于帮助开发人员更快地发现错误。对?对。之所以可以进行编译,是因为开发人员现在正在使用其业务对象或模型而不是仅SQL字符串或类似SQL的语句在代码中编写查询。
如果在.NET中使用正确的数据访问模式,则很容易对内存集合中的查询逻辑进行单元测试。这可以加快测试的执行速度,因为您不需要访问数据库,无需在数据库中设置数据甚至不需要启动完整的数据上下文。[EDIT]这并不像我认为的那样正确。内存中的测试可能会遇到难以克服的挑战。但是我仍然发现这些集成测试比往年更容易编写。[/ EDIT]
今天,这肯定比几年前提出这个问题时更有意义,但是只有我经验丰富的Visual Studio和Entity Framework才是这种情况。如果可能,请插入您自己的环境。
我认为这里有很多好处(可移植性,易于开发/维护,专注于OO业务建模等),但是当试图说服您的客户或管理人员时,所有这些都归结为您使用可以节省多少钱一个ORM。
对典型任务(甚至可能正在进行的更大的项目)进行一些估算,您(希望如此)将获得一些难以忽视的开关参数。
我认为一个缺点是ORM需要在您的POJO中进行一些更新。主要涉及模式,关系和查询。因此,您不打算在模型对象中进行更改的情况可能是因为它在项目或黑白客户端和服务器上的更多共享中被共享。因此在这种情况下,您需要将其分为两个级别,这将需要额外的努力。
我是一名Android开发人员,正如您所知,移动应用程序通常规模不大,因此分离纯模型和受Orm影响的模型的这种额外工作似乎并不值得。
我知道这个问题是通用的。但是移动应用程序也包含在通用保护伞内。