zoukankan      html  css  js  c++  java
  • 编码上的小改进

    IF 

    最初我的代码是这样的
    if(xxxx)
    {
        ...
        if(xxxx)
        {
            ....
            if(xxxxxx)
            {
                 //做最后要做的事。
            }
        }
    }
    问题是,最后要做的事,并没有被执行,而我根本就不知道是哪个if没进来
    后来代码变成
    if(xxxx){
    log('xxxx');
    return ;
    }
    ...如此n个判断,这样以来,看Log基本上可以定位到问题所在了。但仅仅这样,依旧不够。
    接下来的情况是,我知道程序命中该if,那我怎么知道是哪里不对。
    所以修改后的代码为
    if(xxxx){
    log('xxxx=:'+xxxx);
    return ;
    }
    记录该if判断关注或检查的值,用于进一步分析。

    进一步明确职责,避免void类型

    方法A内部,需要将某个值交给方法B来执行,逻辑上是毫不关心方法B的返回值。代码则是这样
    void A(string message)
    {
        B(message);
        ... 
    }
    方法A的目的,是处理Message,只不过由于某种需求,B也要处理,于是将其挂在A中。此时B方法未完成预期的结果,此时问题不好定位。
    于是代码变成
    void A(string message)
    {
        var ret = B(message);
        if(ret == 0 ) 
        {
            log('方法B的返回值为0 异常');
        }
        ...
    }
    这样,若B方法除了问题,直接根据Log快速定位到B方法,然后让写B方法的人来定位,写A方法的人,该干嘛干嘛。

    其他

      1.封装的目的是尽可能隔离变化,如数据库操作。

      2.针对接口进行编程。如在数据库操作上,我们直接使用某个数据库的访问类SqlHelper,这样在切换数据库时代价太大。若当前仅仅只支持Sql数据库,也可以使用工厂,返回接口,给应用层使用。

      3.以做产品为目的,程序员存在目的是奉献更好的产品,不能疲于赶进度。

      4.项目尽可能使用增量式发布。需要添加功能时,直接复制某些文件即可,避免重装站点,或者整体覆盖,容易引起意想不到的问题,风险过大。

      5.调试日志使用文件记录,这样后期代价小一些,如果有必要清理日志,可单独做。总比现场出了问题,背个笔记本,单步调试的好。

      6.使用MVC进行开发时,最好是在分析清楚业务编写代码,直接使用测试工具对接口进行测试。后端开发,则是保证后端接口的合理性和稳定性,而前台页面假设为变化多端的。

  • 相关阅读:
    Sanic二十七:Sanic + tortoise-orm 之Q对象
    Sanic二十六:Sanic + tortoise-orm 之Model、QuerySet提供的查询方法
    Sanic二十五:Sanic + tortoise-orm 之表关联
    Sanic二十四:Sanic + tortoise-orm 之常用字段类型和参数
    Sanic二十三:Sanic + tortoise-orm 之父类Field的参数、属性、方法
    Sanic二十二:Sanic + tortoise-orm 之使用aerich执行数据库迁移
    Sanic二十一:Sanic + tortoise-orm 之模型定义
    [JavaScript]Promise:异步编程
    手把手教你搭建一个SpringBoot工程
    Android 11(R) Power HAL AIDL简析 -- 基本接口
  • 原文地址:https://www.cnblogs.com/codealone/p/3533677.html
Copyright © 2011-2022 走看看