位置: 首页 > 财经 > 正文

CodeFirst模式下,存储过程的缺点比较明显!-环球观天下

来源:古耕说   发表于: 2023-04-07 12:41:47  

一个程序员小哥问我关于SqlServer存储过程相关的问题,我比较尴尬,因为我已经很久没有用过存储过程了,他这段时间以来,问了我好几个关于存储过程的问题,我都没回答上来。其实他发的存储过程代码我都是能看懂的,但是就是不确定存储过程的执行结果是不是我以为的那样!

现在程序员出去面试,基本上也会被问到关于存储过程相关的问题,但是现在我写代码基本都是CodeFirst(代码优先)模式,一般碰到这类问题,我只能说“告辞”,因为我实在没怎么用过存储过程!


(资料图片)

另外像“游标”这类专业词汇,或许现在想起来,也就在书本上看过。记得当初我在学存储过程的时候,应该是全班学得最好的人之一了。但是,很遗憾,从毕业以后就没怎么用过存储过程,基本忘干净了!

因此,我只能跟程序员小哥说抱歉,因为我真的在存储过程这块,不太自信啊!

而我之所以不用存储过程,如果用专业一点的话说的话,是基于以下原因:

存储过程比较复杂

存储过程往往需要涉及大量的SQL语句和业务逻辑,而且在编写和维护过程中需要掌握特定的数据库开发技术和经验。这对于应用程序开发人员来说可能比较困难,也增加了系统设计和维护的成本。

目前大多数开发场景都是以CodeFirst为主,因此,连数据库语句很多人都不怎么熟练了,何况是学习成本更高一些的存储过程呢?但是,其实存储过程并不难学,有经验的程序员可能两三天就能掌握了,但是在CodeFirst场景下,学了似乎也用不到!

存储过程可读性差

由于存储过程是在数据库中编写的,而不是在应用程序代码中,因此可读性比较差,很难进行版本控制和测试。此外,如果存储过程的命名和注释不清晰,将会给后期维护和升级带来一些困难。

比如说普通场景下,当我们发现代码中存在一些BUG的时候,我们只要把代码下载下来看源码就可以了。但是,当代码中使用了存储过程以后,我们就不能确定问题到底是出现在代码里还是出现在存储过程中,因此两边都得查看。这样带来的结果就是很难从代码中联系上下文,降低了代码的可读性。

另外,当某段代码中的存储过程被移除以后,存储过程可能就会被遗忘在数据库里,造成冗余,虽然给数据库不会带来任何压力,但是时间久了以后,可能谁也不敢确定这个存储过程是否有被代码调用过。

存储过程可移植性差

存储过程可能会依赖于特定的数据库平台和版本,导致在迁移或升级数据库时出现问题。此外,如果需要在不同的数据库之间转移存储过程,还需要做额外的工作,例如修改查询语句、调整参数类型等。

存储过程可控性差

存储过程虽然可以减少应用程序和数据库之间的网络流量,但也有可能增加数据库负载和延迟,并且可能会导致死锁等并发问题。因此,在使用存储过程时需要仔细考虑性能问题,并进行必要的优化和调整。

结语

我之所以一直以来没有使用存储过程,其实就是长期以来,我只有在很短的时间内使用数据库直连原生语句的方式来操作数据库。在大部分时间里,我使用的都是以CodeFirst为主的不需要太多关心数据库的编码方式,比如使用Entity Framework或者FreeSql这样的Orm系统的话,直接使用Linq查询等技术来实现,避免了直接操作数据库带来的复杂性和不可维护性

综上所述,存储过程的使用不仅需要考虑它们的优点,还需要仔细评估其缺点和限制,以确保在实际开发中能够得到最佳效果。

关键词:

上一条:

下一条: