大叔的观点
鲍勃·马丁叔叔(Uncle Bob Martin)@unclebobmartin
SQL 并非设计用于计算机程序。它本是用于打印报表的控制台语言。将其嵌入程序是我们行业最严重的错误之一。
有人问到,不使用SQL,那么解决方案是什么,大叔则认为应该用API来代替SQL。
有人问到,大叔对ORM的态度,大叔的回答是“Ick”,表示不喜欢ORM。
我的看法
关于SQL的使用,我虽然方向上与大叔的观点相同,但不像大叔那么极端,尽可能避免在程序中使用SQL,更有利于代码的可维护性,尤其是在强类型语言中,使用SQL,简直就是灾难,不仅是把多种语言混在一起带来的代码可读性问题,更重要的是丧失了类型检查的能力,这让代码的问题在编译时无法识别,需要推迟到运行时才能发现,这带来了极大的迭代效率损耗。
关于ORM,我则认为它是避免直接使用SQL的必要之解决方案,理由是当我们使用面向对象的实体来表达业务时,要将这些实体持久化,就必要面临Object To SQL的问题,ORM则是这一问题的解决方案。如果按照大叔的观点设计某种API来代替SQL,那么大概率还是需要一种工具来解决Object To API的问题,或者说,这种代替SQL的API,其能力很有可能就是ORM的能力。
这个问题与Clean DDD的关系
在CleanDDD的实践中,仓储是一个非常重要的基础能力,要打造足够适用的仓储,就脱离不开面临ORM还是SQL Helper工具的讨论和选择,至少大叔引发了人们对SQL的一轮新的思考和探讨,其中的一些观点,对于Clean DDD的实践和推广也有很大的帮助。
打个广告
浓缩了完整的DDD实践经验的《一分钟学DDD系列》上架了,点击末尾“阅读原文”或复制地址:https://b23.tv/fcpk9pV