zoukankan      html  css  js  c++  java
  • 检测代码位置的比较(C#代码VS存贮过程)

    事由:当一个请假单记录要保存之前,要检测较多的条件。其中检测这个动作可以由三个方面来完成:客户端、服务器的C#代码、数据库的存贮过程

    这个问题一直困扰着我,我的检测代码到底写在哪里,我只隐约感觉存贮过程可能会更好,于是把检测内容准备移进存贮过程,但接着就发现更多问题,于是把两者进行一次比较(仅限于自己目前的能力),看到底是放在哪好。
    (客户端的JS代码以后再说,因为客户端完全可以不检测,或者说客户端检测得再多,服务端也是要重复进行检测的)
                        C#代码 SQL存贮过程
    复用性                中    好
    维护-可读性            好    中
    维护-调试             好    差
    编程方便性             好    差
    测试                 中    好
    性能-运行速度          好    中
    性能-网络交换量         好    中
    面对变化的适应能力       中    差
    部署                 好    好
    复杂度                好    差
    用户体验              中    差

    复用性:
    C#代码无法在VB6中使用,而存贮过程检测的逻辑则可以被VB6简单直接地重复使用后来查了,有C#中生成DLL,让VB6调用的(要试一个看其复杂度有多少)
    http://read.newbooks.com.cn/info/175321.html

    维护-可读性:
    注释功能大家都有,C#中还有代码折叠功能,SQL中有直接看到SQL语句的好处,并且不必建立连接、关闭连接等操作,但C#可以通过函数来弥补。如果子程序完善,连接SQL再执行语句获得返回值象吃饭一样简单,那C#就好过SQL了。

    维护-调试:
    调试时的变量的查看与修改,以及边调试边修改代码,这些SQL大大不如C#

    编程方便性:
    主要是指智能提示,代码格式标准,代码语法性错误,这也是SQL大大不如C#

    测试:
    如果要对SQL中的存贮过程进行自动测试,可以非常容易实现,因为存贮过程关联得比较小。而对C#中的子程序测试,好象问题蛮多的,包括要构建Session,Request等内容,自己把握小一些。

    性能-运行速度:
    使用C#检测条件,不必动到数据库的,也就不必连接之类的操作(这时忽然想起来,如果不必使用数据库的检测,其实JS端就完成了,会不会JS检验+存贮过程检验=OK),速度会快,而存贮过程的检测,至少要调用一个连接存贮过程这个动作。
    但对于要使用数据库的数据时,C#的速度一定没有存贮过程快

    性能-网络交换量:
    这里是指如果数据库与IIS不在同一台服务器上时的网络交换量,与运行速度结果类似,对于不用连接数据库的,C#好,对于连接数据库的,SQL好。

    面对变化的适应能力:
    变化是指要增加一个检测条件时,如果入口参数没有变化,存贮过程只要改一下,就没事了。C#代码则是改完代码,编译,部署。
    如果入口参数有变化,存贮过程一调整,当前操作的用户就要出错了。可以通过一定的方案让存贮过程的入口参数不必调整,方案如下:
    我们准备把客户端传过来的参数传给一个存贮过程时发现,最经常变化的就是这些参数的个数,有时多一个,有时少一个,有没有办法让参数恒定。代码不受参数个数的变化而变化。后来想了一种方法,即把客户端的参数一古脑儿地扔到一个表中,然后只传递记录的ID给存贮过程,由存贮过程自己去取,取出来设置成具体参数再进行处理。
    1、把获取到的参数保存到一个表中,甚至,就是一条字符串
    2、调用存贮过程时,只传该记录的ID
    3、存贮过程再从该表中获取信息
    也正是因为这个问题,才想到写这篇文章的。

    部署:
    由于我现在知道C#如何部署时不中断当前用户,因此对其内容的修改不会有特别的影响,两者对部署不会差异太大。

    复杂度:
    如果使用存贮过程,则也是要经过C#代码这一段传送,这样做凭空多了一层,增加复杂度。

    用户体验:
    是指询问用户的情况,用存贮过程不容易实现,用C#则相对来说还是方便的。

    总结:
    比较后,很明显,我的预感是错的,C#原来的一些缺点被克服后,对比一下,C#好多了。今后再对复用、自动测试、适应变化这三个方面加强一下,就可以义无反顾地在C#中写入大量的检测语句了。

  • 相关阅读:
    更改Linux时区的两种方法
    Azure上部署FTP服务
    log4j2简单使用
    elasticsearch5.5.2环境搭建
    springTask和Schedule学习
    防止SpringMVC拦截器拦截js等静态资源文件
    Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
    ServletContext总结
    window.location.href和window.location.replace的区别
    javadoc文档
  • 原文地址:https://www.cnblogs.com/yzx99/p/1384121.html
Copyright © 2011-2022 走看看