ORM的见解

ORM是反模式吗?

为什么说ORM是一种反模式一文中,讲述了ORM是一种反模式。

刚好我在上一家公司里,也涉及了一些关于ORM的设计。一旦ORM的使用者习惯使用了ORM这种模式,就会尝试将SQL的各种操作翻译成Java代码,最终结果,就是生成了一套API。生成API的后果在很多文章都有说到,就如同DSL一样,会增加学习成本。

而这种学习成本真的有必要吗?在学这套API,你需要有相关知识,然而这套API必然不会完整解释相关知识,也就是你必须从SQL那学会相关知识,最终还是回归到你要学SQL。也就是你学了SQL,又学了这套API。

而导致这种结果,就是常常我们说的要封装。想通过封装进行断耦合,然而并没有注意到,这种知识/抽象上的耦合。

然而自己弄一套API,但是你没有拥有充足的知识,以足够分析大部分情况,就会出现以下:

  1. 遇到一个问题补充一个接口。然后当接口达到一定程度时,就不得不重构。
  2. 新的问题可能要改动框架。

综上所述,过度抽象未必能达到良好的结果。当情况复杂时候,在Java里使用SQL,或者类SQL的API是最好的做法。而分散的SQL集中于一个地方,并带有注释,这样就可以减少Java程序员对SQL的深入学习,并将该SQL移交给更为专业的人士进行统一操作。