天天看点

代码容错性及设计的一些小技巧(持续更新)

do-while的使用

#ifndef _BEGIN_DO_WHILE_
#define _BEGIN_DO_WHILE_  do{
#define _END_DO_WHILE_   }while(false);
#endif

具体代码中的使用
_BEGIN_DO_WHILE_

xxx
if 出错
    break;
xxx

_END_DO_WHILE_

xxx
这样即使程序出错 也可以保证 _END_DO_WHILE_之后的代码得到执行
           

变量前缀的使用

class Test
{
private:
    string strProductId;
    int iProductNum;
    int iCoinType;
    int iCoinNum;
    int iErrorCode;
    int strBillno;
};

变量前缀用来标识变量类型,可以在后续编码过程中快速识别变量类型,不用再跳转去查看.
           

转换嵌套设计为线性设计

需求: 记录qq用户 微信用户 游客用户的流水记录 使用reids存储,并提供查询.

我的设计: 使用set结构

key value
qq <账号,<时间戳,flowItem>>
wx <账号,<时间戳,flowItem>>
guest <账号,<时间戳,flowItem>>

师父的设计: 使用sorted set结构

key score value
qq_账号 时间戳 flowItem
wx_账号 时间戳 flowItem
guest_账号 时间戳 flowItem

namespace以及Google protocol buffer的使用

namespace的使用可以有效的防止命名污染的问题,避免和原有的代码发生冲突.

在具体的项目中,可以使用Google protocol buffer.(或者公司的jce协议)

参考:

  • https://developers.google.com/protocol-buffers/docs/overview
  • https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

该协议最大的特点是兼容性特别强,使得后续的业务拓展非常便利.并且用户只需要定义数据结构即可,代码可以由解析器自动生成.

获取配置的懒惰型原则

  • 能一次初始化的配置,一次初始化完成,不要每次调用反复初始化,浪费资源.
  • 在读取配置类的信息的时候,比如中共享内存中获取相关数据,一次读取的结果可以缓存起来,第二次读取的时候,先从缓存中获取数据,如果缓存中没有数据,则再去共享内存中读取数据,然后继续缓存.

一些代码编写规范

  • 模块中的函数一定要对一些边界条件和参数的合法性进行判断,即使是自己调用自己的函数,这样可以有效降低后人调用该函数出错的概率.
  • 代码中尽量不要出现硬编码,多使用宏和const常量,必要时使用static进行作用域的限制.
  • 养成顺手写注释的习惯,利己利人.
  • 能独立出来的函数或代码模块一定要独立出来,降低代码的耦合性以及降低相同代码出现的可能性.
  • 开发环境能使用公共库尽量使用公共库,相同的头文件保证在整个项目中只有一份,防止多份拷贝造成头文件的不一致性.
  • 监控很重要,可以及时了解服务的状态

继续阅读