OO和SQL,应该携手共进

最近两年来,经常在OO和SQL这两兄弟阵营里转来转去,总想做出个“决断”,结果却是谁也舍不得,手心手背都是肉啊。

十年前学应用开发的时候,SQL是绝对的王者,一直也就用了好几年,搞定了不少事情。有时候也觉着烦,尤其是许多不相干的调用代码,罗罗嗦嗦粘贴个没完。这时候总是想,能不能轻松点啊。

这时,以Hibernate为代表的ORM流行起来了,笔者也就兴冲冲地投入到实践当中。四五年前已经可以很舒服地配合Spring的 Hibernate Template写代码了,那是相当地省事啊。虽然Hibernate也不是盏省油的灯,费了不少学习和调试的时间(老实说笔者到现在也算不上精通),好在以OO方式写应用,逻辑代码清晰多了,结构化进一步提高,也算值了。这时候又在想,还能不能更轻松点啊。

而这时,RoR火了起来。笔者在一年半前一接触,立马就迷上了Active Record,以前多少烦恼似乎瞬间烟销云散了,实在是非常的爽快!这个阶段,笔者已经彻底成为OO的迷信者,言必OO,并且深信以AR为代表的DSL是企业应用的最佳解决方案。

整好这时碰到一些传统C/S转B/S的企业应用项目,笔者满以为可以轻松搞定,结果却是出人意料,竟然被这些项目当头打了一棒。由于传统企业应用是以写为主的OLTP,并混合了部分查询相当复杂的OLAP,性能要求还是比较高的,ORM很快就败下阵来。很多时候甚至逼迫笔者重拾SQL,这时候两难的境地出现了:一边是清晰的OO,一边是高效的SQL;普通CRUD是OO的强项,而复杂的查询统计则又是SQL的天赋。笔者于是无奈地在这两个阵营里转来转去,一面到各个技术站点寻求“真理”。可惜这年头,以SQL为代表的传统阵营和以OO为代表的新生阵营有些“水火不相容”的味道,正是“人也多嘴也多讲不清道理”。寻求得越多,也就疑惑得越多。自己也参与并发起过一些争论,结果愈发云山雾水。

工作生活疲累之余,信手翻翻十多年前一度热衷的儒释道经典,这才猛然间有了“不识庐山真面目,只缘身在此身中”的觉悟。答案其实已经在笔者实践的“无奈”当中。由此可见古人“兼容并包”的睿智。
正所谓OO和SQL,本是同根生,相煎何太急。与其争论谁比谁更高更强,不如共同携手解决现实问题。

在此原则下,笔者对项目中SQL不爽的部分改用OO,OO不适合的地方沿用SQL,终于达到了很好的平衡。
于是,曾经深信而后怀疑否定的的AR,携手SQL老大哥,相当痛快地解决了大部分企业应用问题。
对立并非正途,合作才是王道,这个道理在代码领域同样成立。

复杂查询返回的东西不还是一个对象么?查询在dao里,不会跑去领域层次。领域层次OO就够了。

sql语句都差点不会写的人来顶一下

呵呵。OO不是万能的,但是不OO也是万万不能的。现实总是不以个人的意志为转移的,项目也不是一个人做的了的,团队是很重要的.OO厉害的设计领域模型,SQL厉害的做做数据库优化。