`

分析某位高人对ORM的评价

阅读更多

 

其实,我认为,关系数据库与OO没有阻抗,这一观点是从外部(业务的角度)来看程序和系统,这样来看的话们我们把程序理解成一个故事,应当保存就保存,应当获取就获取,保存和获取是故事中的一些具体情节而已。

 

说到CRUD,就不是这个视角了,外部看,只有“将某个数据保存起来”和“取出来某个数据”而已。而这个“情节”,是永远需要的。

但“CRUD”却不是永远需要的,况且,即便从内部看,很多大型系统,根本就没有CRUD,只有“Save”和“Query”,所谓的“Update”,只是“Mark”和“Add”,因为要保存每一个数据的原始状态数据,不可能删除和覆盖;“Delete”更是不可能的,从来不会有需要删除的数据,即便是错误的,可以归档,可以Mark。

 

是否一天天陷身在系统内部,会有“不识庐山真面目,只缘身在庐山中”?从外部看,当行则行,当止则止,根本就没有矛盾。

 

转帖内容如下:

 

Pere Villega 的博文内容:

 

大部分信息系统都是持久化存储信息然后查询获取,这大部分是通过RDBMS完成的,不久NoSQL运动促使其成为一个关系数据库的替代者,总得来说,我们需要一个存储区域来保存数据。

但是,这不代表没有问题,流行的开发模型是基于面向对象编程语言配以关系数据库,这种组合有致命的问题:对象和关系阻抗不匹配性,换句话说,他们并不能在一起工作得很好,这其中有许多原因。

这不是一个新问题,人们也在艰难努力提供新的解决方案以消除痛苦,从一个开发者角度看,ORM可能缓解一下这种不匹配问题,即使只是稍微低,像Hibernate这样的工具负责与关系数据库层打交道,这样开发者不必花费时间在这上面,但是这并不完美,由于抽象泄漏定律使得问题变得棘手,任何使用过Hibernate的人都发现通过其框架实现的查询都不够完美,那就意味着开发者必须钻研得很深以便知晓如何告诉框架让它按自己的意图行事,这也通常意味着你进入了底层低级别,包括数据库层,阻抗不匹配问题又冒出来了。

这样,ORM作为一个完整的解决方案失败了。

 

banq的博文:

使用ORM相当于对象和数据库两个数据结构,因此存在阻抗矛盾,相反,因为SQL属于算法过程,SQL+数据库反而比较协调,但是做些CRUD还可以,应对复杂的业务,需要翻看各种数据表设计才能明白业务,数据库表又混杂了各种技术性能优化等技术方言,相当于方言夹带普通话,只通普通话(代表业务语言)的人不容易听通,增加沟通的难度。

后来有了Java等对象语言,就有了SQL+数据库+DTO数据Java对象,这就是大部分系统的特点,两个数据结构发生阻抗,改了数据库表还要改Java对象。

Hibernate试图协调对象和数据库两种数据结构矛盾,其实是清官难断家务事,捣浆糊而已,因为从逻辑上对象和数据表两者本来就没有必要搞到一起,搞个映射对应。

Hibernate出来很讨人喜欢,但是做些简单CRUD没有问题,随着项目深入,加上程序员数据库思维影响,使用Hibernate觉得隔着靴子瘙痒,其实我一直认为,如果程序员有阅读一个框架的源码冲动时,说明抽象泄漏已经发生,泄漏出来的坏味道已经让使用者心神不宁了。最终现实是:使用Hibernate的人是SQL与Hibernate两个要一起掌握,其实是增加学习成本。

分享到:
评论
1 楼 lihuiyongapple 2015-07-01  

相关推荐

    ORM思想的深入学习ORM.zip

    这样的实践有助于理解ORM的工作原理,同时也能提升对数据库操作和设计模式的理解。 5. **测试代码**:在学习ORM的过程中,测试代码至关重要。通过编写测试用例,可以验证ORM框架的正确性,包括对象的持久化、查询、...

    ORM对象关系映射

    ORM 技术包括以下四部分:一个对持久类对象进行 CRUD 操作的 API;一个语言或 API 用来规定与类和类属性相关的查询;一个规定 mapping metadata 的工具;一种技术可以让 ORM 的实现同事务对象一起进行 dirty ...

    K-ORM 自定义ORM工具

    《K-ORM自定义ORM工具详解》 ORM(Object-Relational Mapping)是现代软件开发中的一种重要技术,它将数据库中的数据与程序中的对象进行映射,使得开发者可以使用面向对象的方式操作数据库,而无需关注底层SQL语句...

    php中的orm

    这样,开发者可以对这些对象进行操作,如创建、读取、更新和删除(CRUD),而ORM会自动处理与数据库的交互。 Doctrine是PHP中的一款强大的ORM工具,提供了完整的数据库管理解决方案,包括查询构建器和原生的SQL...

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    cpp-SQLiteORM用于现代C的SQLiteORM库只有header

    标题中的"cpp-SQLiteORM用于现代C++的SQLite ORM库只有header"表明这是一个关于C++的SQLite对象关系映射(ORM)库,且该库仅包含头文件,这意味着开发者无需链接任何库文件,只需包含相应的头文件即可使用。ORM是一...

    Moon.Orm下载

    Moon.Orm是一个专门为.NET开发者设计的轻量级ORM(对象关系映射)框架,它具有强大的功能和良好的可扩展性,能够支持多种不同的数据库系统,包括但不限于MySQL、SQL Server、Oracle、SQLite等。ORM框架的主要目标是...

    sqlite3的ORM框架

    SQLite3的ORM(Object-Relational Mapping)框架是一种在C++编程中将数据库关系模型与对象模型进行对应的技术。ORM框架使得开发者可以使用面向对象的方式来操作数据库,避免了直接编写SQL语句,提高了开发效率和代码...

    eform集成开发手册

    这些表结构是eform集成开发的基础,开发者必须对它们有深入的理解和掌握。 在使用eform for .net 和eform for java 部分,手册详细介绍了如何使用eform在不同的开发环境中,包括使用sql server 2000 和oracle9i 等...

    android orm框架比对分析及功能完整示例

    本文将深入探讨四个常见的Android ORM框架——Provider、ORMLite、GreenDao和XutilsDao,并通过对比分析其特点和功能,为开发者提供参考。 首先,Android的ContentProvider是系统内置的数据访问机制,不仅支持...

    spring-orm源码

    Spring-ORM对多种ORM框架进行了封装,如Hibernate、JPA和iBatis。例如,对于Hibernate,Spring提供了HibernateTemplate和HibernateDaoSupport类,它们简化了与Hibernate Session的交互。源码中可以看到这些类如何...

    ORM映射与WEB的应用

    例如,在Spring Data JPA中,我们可以通过定义Repository接口并结合Hibernate ORM,轻松实现对数据库的操作。而在Python的世界里,SQLAlchemy是常用的ORM工具,它允许开发者以Pythonic的方式定义模型,并进行数据库...

    SqliteORM,一个很好的Sqlite ORM框架

    Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...

    hsweb-easy-orm, 简单的orm工具,为动态表单而生.zip

    HSWeb-Easy-ORM 是一个开源的简单对象关系映射(ORM)工具,设计初衷是为了简化动态表单的处理。ORM 工具的核心作用在于桥接数据库与编程语言,允许开发者通过面向对象的方式操作数据库,避免了直接编写 SQL 语句的...

    Introducing Delphi ORM.zip

    【标题】"Introducing Delphi ORM.zip" 是一个关于Delphi ORM(对象关系映射)技术的资源包,其中特别提到了TMS Aurelius这一框架。ORM是一种编程技术,它允许开发人员使用面向对象的方式来操作数据库,而无需直接...

    ORM客户关系体系统

    通过学习和分析这个ORM客户关系管理系统,开发者可以深入理解如何在实际项目中运用三层架构和ORM技术,提升数据库操作的效率,以及如何组织和设计业务逻辑层。同时,源码的提供有助于学习者查看和理解实际的代码实现...

    orm的详细解释概念

    对象关系映射(ORM,Object-Relational Mapping)是一种编程技术,它旨在解决面向对象编程语言与关系数据库管理系统之间的不匹配问题。ORM 提供了一种方式,使得开发者可以用面向对象的方式来处理数据库,而无需直接...

    .NET ORM框架

    ORM框架允许程序员使用面向对象的方式来处理数据库,将数据库中的数据与程序中的对象进行关联,从而避免了对SQL的直接操作,提高了开发效率和代码的可维护性。 在C#.NET环境下,ORM框架扮演着桥梁的角色,它使得C#...

    eform自定义表单

    **eform自定义表单**是北京方程软件推出的一款开源工作流解决方案,它专为程序员在工程开发中简化表单设计流程而设计。这款工具的出现,极大地提升了开发效率,减少了开发表单时的繁琐步骤,使得程序员可以更加专注...

    .net版ORM代码示例

    在.NET框架中,ORM技术可以帮助程序员更高效地处理数据库操作,减少对SQL语句的直接依赖,提高代码的可维护性和可移植性。 这篇内容主要以.NET ORM代码示例为切入点,讲解如何在.NET环境中使用ORM进行数据库交互。...

Global site tag (gtag.js) - Google Analytics