一、原本没有ORM

曾经面向过程编程是主流,现在面向对象编程成了主流。面向过程跟关系型数据库天然地契合,或者说关系型数据库本来就是为面向过程编程而准备的。

图 1.1

图1.1就是面向过程编程与数据的关系。实际上早期的面向对象编程与数据的关系也是这样的,并且在现在也可以在面向对象编程中这样使用。

图 1.2

图1.2就是ORM了。相当于把程序多切了一块出来,粒度划分细了一些。

二、ORM的思想

图 2.1

ORM的思想就是通过一个规则,把数据库模型转换为对象。就和太阳光照在红玻璃得到红光差不多。

三、ORM带来了什么?

从代码处理角度来说,编程就是处理可变代码和不可变代码之间关系的一个过程。ORM带来了什么呢?ORM最大的特点是把数据对象固化到了代码中,把运行时做的事情提前到了编译期。

四、ORM是进化还是退步?

ORM是进化还是退步?

首先,程序开发,根据实践证明只维护一个版本是最优的。但是ORM实际上是对数据库结构做了一份拷贝,现在我们需要同时维护数据结构已经对象的关系结构。我认为从这点上来说,它是编程方式上的倒退。尽管现在大多ORM框架都提供了生成实体对象的工具,也就是说生成这个拷贝的过程实现了自动化。

ORM的初衷是依赖配置,但是实际上并没有完全依赖于配置,当然这个和C#与Java是静态语言有关。如果是动态语言也许会好一些,当然我并没有做过尝试,只是猜测一下。

一直以来,三层架构的思想就是改变一层的东西能不影响到另外一层。ORM通过MODEL跨越三个层,达到了这个目的。当然,如果用反射也可以不用这种跨越。跨越三个层,让三个层都对Model产生了依赖,这点我觉得也是它不好的地方。因为Model是跟随数据库变动的,不能保证改变Model不会对其它层面产生影响。而面向对象编程最基本的思想就是固化不变的东西,提出变化的东西。但是要让Model保持不变,必须要数据库不发生改变,我觉得用这个作为前提不是很理想。实际开发中数据库结构是经常变动的。也许你要说变动的时候只做加法,这样也许,当然,我只认为理论上这样是可行的。

五、没有ORM,我们还能怎么做?

那可能就是下一代数据访问的方式了。我认为面向对象编程还没有到能搞定一切的地步,现在就有很多方面显出了它的不足,所以,现在一直有新的理论出来对它进行补充。至于说面向对象的数据库,现在还需要解决至少两个问题,不说对象如何持久的问题,光是对象和数据库里对象同步就很难。比如db4o,假如对象增加一个熟悉,数据库里是无法体现的。至于将来会怎么样,将来才知道吧。

ORM是进化还是倒退?相关推荐

  1. 物竞天择,适者生存,架构进化之路

    作者介绍 沈剑,58到家技术总监,技术委员会负责人.曾任百度高级工程师,58高级架构师,C2C技术部负责人,58技术委员会主席! 核心内容:58同城流量从小到大过程中,架构是如何演进的?遇到了哪些问题 ...

  2. 好架构是进化来的,不是设计来的

          --58同城架构进化之路 文章出处:http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=400276397&idx=1 ...

  3. .Net orm 开源项目 FreeSql 2.0.0

    写在开头 2018年11月头脑发热到今天,一晃已经两年,当初从舒服区走向一个巨大的坑,回头一看后背一凉. 两年时间从无到有,经历数不清的日夜奋斗(有人问花了多长时间投入,答案:全职x2 + 两年无休息 ...

  4. java人工智能开源项目_人工生命——一个用代码模拟生命进化的人工智能开源项目...

    开源项目作者 朱勇: 桂林电子工业学院机械本科,在全民学计算机大潮下,上了编程这条贼船,历经学习机.PC.286, 386, 486, 奔腾...,见证了个人计算机发展史.学过Basic.Delphi ...

  5. python django ORM 简单的增删改查案例记录

    在学习中摸索简单的ORM和模板层html的数据交互中的增删改查功能. 主要和网络教程不同的是我查询用的是fileter去对象,再在html中用for in给对象实例化,再获取对应属性的值,而b站的教程 ...

  6. 阿里CTO王坚:商业进化的四个关键词

    阿里CTO王坚:商业进化的四个关键词 iwangshang / i天下网商 / 2015-11-28 TAGS: 分享: 微博 QQ 腾讯微博 摘要:王坚从互联网.数据.计算和计算经济四个角度阐释了新 ...

  7. 好架构是进化来的,不是设计来的(58架构演进)

    好的架构化是进化而来的,不是设计出来的 ----58沈剑 核心内容:58同城流量从小到大过程中,架构是如何演进的?遇到了哪些问题?以及如何解决这些问题? 核心观点:好的架构不是设计出来的,而是进化而来 ...

  8. 元宇宙代表人类的倒退

    引言 近日的"元宇宙"这一概念大火,刷爆朋友圈,被说成是互联网的未来,它以各种姿势吸金,让创业族们看到闪着金光的未来.然而,就在大家都说它贼好的时候,有部分业内人士却说它是个坑!那 ...

  9. flutter如何访问mysql数据库_手把手教你在Flutter项目优雅的使用ORM数据库

    Flutter ORM数据库介绍 Flutter现在开发上最大的槽点可能就是数据库使用了,Flutter现在只提供了sqflite插件,这表明开发者手动写sql代码,建表.建索引.transation ...

最新文章

  1. 怎样才能学好Vue,听听尤雨溪怎么说?
  2. C#网页自动登录和提交POST信息的多种方法
  3. BEA-141281 unable to get file lock, will retry ...
  4. JVM的监控工具之jinfo
  5. es数据频繁的更新_es之文档更新过程中并发冲突问题
  6. seo超强外部链接、内部链接技巧
  7. 【CVPR2019】 教程 Tutorials List
  8. linux下last与lastb命令详解
  9. 业界分享 | 数据科学家工作融入及面试技巧
  10. Mirai 新变体利用严重漏洞攻击网络安全设备
  11. jQuery基础 - 选择器
  12. 改进灰色预测matlab代码,灰色预测模型Matlab代码[比赛已经用过,保真好使]
  13. Python 构建 Random Forest 和 XGBoost
  14. 数学符号名称,解释,定义加举例
  15. jsp+ssm计算机毕业设计逸尘房屋销售管理系统【附源码】
  16. oracle asm密码是什么,ORACLE 12C ASM 新特性:共享密码文件
  17. asp.net通用的sql插入与修改语句,一劳永逸
  18. 关于游戏开发,如何开发一款游戏(基于unity)
  19. 如何理解最小相位信号就是振幅谱相同的信号中群延迟最小的那个?
  20. 傅里叶变换、拉普拉斯变换与z变换对比

热门文章

  1. 猫头鹰的深夜翻译:你需要了解的数据库名词
  2. 51Nod-1082 与7无关的数【进制+打表】
  3. lanmp环境的搭建
  4. spring boot配置写法
  5. iOS开发之抽屉效果实现
  6. [Korean]发音
  7. 成功人士具备的20个习惯(转载)
  8. Java 多线程 之 银行ATM实例
  9. Mongodb数据库的基本操作
  10. 搭建yum仓库定制rpm包