zoukankan      html  css  js  c++  java
  • ORM是进化还是倒退?

    一、原本没有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,假如对象增加一个熟悉,数据库里是无法体现的。至于将来会怎么样,将来才知道吧。

  • 相关阅读:
    DNS 原理入门
    DiG HOWTO How to use dig to query DNS name servers.
    Top 10 Free Wireless Network hacking/monitoring tools for ethical hackers and businesses
    LoadRunner:视频教程、课件
    Android:开发环境搭建相关问题
    Android:使用代理服务器安装SDKs
    JavaSe:Cookie 管理的API介绍
    使用 Eclipse 玩转 C、C++
    C++: 主要知识点
    C、C++: 引用、指针、实例、内存模型、namespace
  • 原文地址:https://www.cnblogs.com/birdshover/p/1345068.html
Copyright © 2011-2022 走看看