从数据结构+算法分析ORM的末日
大家讨论都挺好,我下面进行纯粹分析一下,今天脑子比较好些。
对象和数据库都是一种静态的数据结构,而SQL与LinQ或Lambda表达式或Stream都属于一种动态算法过程。两个分别对应内存和CPU,如同哼哈二将,阴阳一体,一个系统由这个两个组成比较和谐。但是有时会组合错误。
和谐:
数据结构+算法过程
不匹配阻抗:
数据结构+数据结构
算法过程+算法过程
使用ORM相当于对象和数据库两个数据结构,因此存在阻抗矛盾,相反,因为SQL属于算法过程,SQL+数据库反而比较协调,但是做些CRUD还可以,应对复杂的业务,需要翻看各种数据表设计才能明白业务,数据库表又混杂了各种技术性能优化等技术方言,相当于方言夹带普通话,只通普通话(代表业务语言)的人不容易听通,增加沟通的难度。
后来有了Java等对象语言,就有了SQL+数据库+DTO数据Java对象,这就是大部分系统的特点,两个数据结构发生阻抗,改了数据库表还要改Java对象。
Hibernate试图协调对象和数据库两种数据结构矛盾,其实是清官难断家务事,捣浆糊而已,因为从逻辑上对象和数据表两者本来就没有必要搞到一起,搞个映射对应。
Hibernate出来很讨人喜欢,但是做些简单CRUD没有问题,随着项目深入,加上程序员数据库思维影响,使用Hibernate觉得隔着靴子瘙痒,其实我一直认为,如果程序员有阅读一个框架的源码冲动时,说明抽象泄漏已经发生,泄漏出来的坏味道已经让使用者心神不宁了。最终现实是:使用Hibernate的人是SQL与Hibernate两个要一起掌握,其实是增加学习成本。
EventSourcing是因为DDD这个用对象分析复杂业务的方法出现以后才出来,ES属于算法,领域对象聚合根实体属于数据结构,两种阴阳搭配协调,如同SQL+数据库一样干净。
当然,LinQ+集合或Stream+Collection都属于和谐干净的阴阳合体。OO+函数也是。包括大数据分析中Stream+Cache都是这样。
总之:只要一个系统只有一个数据结构+一个算法过程,这个系统本身就干净和谐,只有系统架构干净简单,才不至于因为架构复杂而导致项目失败或导致项目维护困难。聪明的人不能因为自己发明解决问题的方法干扰了自己解决问题的目的。
[该贴被banq于2014-04-23 07:37修改过]