看到阿里巴巴 java 编码规范有这样一条
关于这条规范, 我说说我个人的看法
用不用存储过程要视所使用的数据库和业务场景而定的, 不能因为阿里巴巴的技术牛逼, 就视他们的手册里的每一项规范为圣经, 盲目的去遵循
对于手册中的这项规范, 我觉得使用 MySQL 的程序员认同占多数, 而使用 SQL Server 的程序员反对占多数 原因在于 MySQL 对 SQL 编程和复杂查询性能优化的支持实在太烂不过从手册的上下文来判断这条规范应该就是针对 MySQL 的
记得 MySQL 支持存储过程是 5.0 版本开始的, 那时候已经是 2006 年了, 而从新版本发布到用户全面升级, 势必要延迟几年, 而同时期的 Sql Server2005 和 Sql Server2008 的 Transact-SQL 编程已经相当成熟, 不是 MySQL 能够追赶的上的 而业务逻辑这个东西, 可以放在 SQL 端实现也可以放在语言端实现, 恰恰 MySQL 对于 SQL 编程支持的不完善, 造成使用 MySql 数据库的程序员都偏向于把逻辑放在语言中实现, 加上互联网的蓬勃发展, MySQL 使用场景越来越广, 此消彼长, SQL 编程技术也就越来越不招人待见
然而, 这并不能表明 SQL 编程无可取之处
在微软技术栈程序员中, 存储过程绝对神器级的解决问题手段, 不管是存储过程, 视图触发器自定义函数这些都是极常用的技术而这些在 MySQL 中基本上是见不到的, 在开发基于 MySQL 的项目中, 要是有人胆敢使用此类技术, 绝对会被视为异端, 并毫不留情的遭受打压在微软技术栈中, 优先推荐将业务逻辑使用 Transact-SQL 编程实现, 封装在数据库中, 供外部. Net 程序调用有的项目通过这种方式实现, 外部的程序就是个空壳子, 所有复杂的逻辑全在数据库里面 拿 MVC 模式打比方, model 层的内容全在数据库里, 程序中只剩 Controller 和 View 层的内容, 这会让人产生一种编程语言没鸟用的错觉 但是这样做是有好处的
首先, 很多人说存储过程性能不行, 其实也不一定, 尤其是 Sql Server 大规模高并发分布式场景下 SQL 编程不占优势, 但是并非所有应用都是如此的, 在普通应用场景下, SQL 编程的性能优势就体现出来了 因为编程语言对数据库的操作最终都会转化为 SQL 语句传递给数据库执行, 那在具备优秀的 SQL 编程能力的情况下, 通过 SQL 编程实现业务逻辑显然比通过程序语言实现更底层, 粒度更细, 和数据库本身结合的更紧密, 更利于性能调优 虽然原本在程序端的计算量被转移至了数据库端, 程序端压力小, 数据库端压力大, 但是两者相加的总压力却变小了, 因为把逻辑放在程序端实现, 无法百发百的压榨数据库性能, 从而导致资源浪费 通过 SQL 编程实现业务逻辑, 数据库压力虽然大了, 却可把原来属于程序端的服务器资源划给数据库端, 这样在总体上来说资源不但不浪费, 而且还节省了 通过数据库实现业务逻辑的性价比更高再者, 大多数程序的业务逻辑无非是对数据库的增删查改, 没有谁比 SQL 更适合干这个事情, 包括编程语言, 因此用 SQL 编程来实现业务逻辑最合适不过 不要说什么 SQL 编程不支持面向对象, 无法解决复杂问题, 先不说大多数项目没有到达复杂的程度, 现在主流的 ORM 框架的实现都是不符合理论的, 谁说关系表可以映射为对象的, 荒唐况且, SQL 语句面向结果编程符合的函数式编程模式, 而函数式编程是现代编程界的一股清流, 牛逼之处不言而喻 即使真碰到什么问题是 SQL 编程无法解决的, 也可以把这部分问题提取出来通过程序实现, 但我相信这样的问题总是占少数的
其次, 把逻辑封装在存储过程里, 有一个好处是改动方便 改程序需要重新编译停服发布, 存储过程是可以热更新的, 能减小发布程序所带来的影响在以 SQL Server 为基础的程序中, 光上面说的这些也足够成为用 SQL 编程实现业务逻辑的理由了但在 MySQL 下是不成立的, 我曾经见过一个. net 程序员强行把 MySQL 当 SQL Server 使, 结果项目后期维护跟翔一样臭
这个 Java 手册是从阿里巴巴的业务场景中提炼出来的, 照着它练能做出很厉害的项目来但是在整个软件开发行业, 不是所有的企业都是互联网公司, 即使在整个互联网行业中, 也不是所有的公司都是阿里巴巴, 不是所有的项目都要应对巨量请求, 不是所有的项目都使用 MySQL 数据库 诚然, 这个手册的规则是正确无疑的, 可就像韦小宝说的, 跟小皇帝打架用的着花几十年时间练化骨绵掌吗, 花几小时练挤奶龙爪手就足够了 所以, 是不是用存储过程还是视实际情况而定, 一票否决是不明智的
还有, 那些说存储过程难以调式难以修改的, 要不就是没用对数据库, 要不就是 SQL 编程能力不足以我个人的经验来说, 存储过程是个好东西, 尤其在 SQL Server 下如果数据库仅仅是用来当存储数据的仓库, 那像 OracleIBMMicrosoft 用的着费劲把它们产品的功能做这么强大吗, 那些已故的数库领域的先驱都要死不瞑目了
来源: https://www.cnblogs.com/aspwebchh/p/8464105.html