团队规定要开始禁用 ORM
公司的多位上司定了下面一条开发规范军则,小弟资质不深,只是看不太懂给的理由,还请大佬们评论一番,给些指导。
禁止使用 ORM 自动生成的 SQL 语句,请将 SQL 直接写在代码里。参数可以使用绑定参数的 API 。比如 ActiveRecord 提供的 update()/insert() 方法,均不可使用。每一个数据库操作应有显式的 SQL 声明。
理由:
维护占生命周期的90% 。
在整个开发和维护过程中,我们一直在干这几件事:
检索:找到它。
追溯:它从哪里来。
跟踪:它到哪里去。
于是:
- 对象必须能够被定位。越精确(比如消除重复项)越好、越容易被记忆越好。
- 强线索。比如显式声明的字段 obj.MyField ,通过 IDE 可以看到它的定义(含注释)、它被多少地方使用到、可以自动重构重命名;而 obj[“MyField”] 只能字符串全文检索了。如果有多个不同地方都叫 MyField ,还得消除歧义(第一点)。
- 原生态。信息传递过程中尽量不发生改变,越静态和固定越容易被跟踪。反之,如果一开始叫 A,传递到第二处叫 B,第三处叫 C ,整个线索可能就乱了。
…(还有好多)
目前 PHP 上的 ORM 如 ActiveRecord 基于约定的表名、动态生成的 SQL 不能满足上述要求。
使用动态生成的SQL,省下来的是第一次开发的时间。在后续的维护过程中则制造负效益。
然后:
- SQL 复制下来就可以贴到数据库工具里跑了,调试、调优都需要。动态生成的,拿到原始语句很困难。
- 动态的语句不是最优的。隐藏了细节,最终性能调优上可能会产生问题。
另外说明下,写下这个理由的 leader 原先主要做的是 .net 开发。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: