一个更加的KISS设计

 

一个更加的KISS设计


 

  翻开UNIX圣经《UNIX编程艺术》一书中,第107页第五段落写着“当你很想设计一个很复杂的二进制文件格式,或一个复杂的二进制应用协议时,通常,明智的做法是躺下来等待这种感觉过去,如果担心性能问题,就在应用协议之上或者之的某个层面上压缩文件协议流,最终产生的设计会比二进制协议更干净,性能可能也更好(文本压缩起来更好,更快)”——《UNIX编程艺术

 

  我们以前的一个项目中。就有这样的需求,就是客户端和服务器的协议设计问题。比如移动的营销案优惠信息数据:有多个营销案模版,每一个营销案模版有多个营销案信息。以前我们的做法是,将所有的营销案模版数据打包成为二进制信息,放在CCmEngine对象内存中。  

CCmdEngine是一个具体的包的一个抽象。一个具体包中还分有多个字段域。每一个字段域放入一个CmdEngine模版对象,在版对象的字段域中,放入多个营销案信息。这样有多个CmdEngine对象层层组成了一个树型的数据结果。比如以前我们营销案信息查询1000001

命令字一样。

  从传统的UNIX的设计者哲学来说,肯定有很多不如人意的地方。主要问题是,整个协议数据密不透风。出了BUG,很难调试。

  后来设计优惠信息查询1000026命令字的时候,我努力坚持要废掉这样的设计。而尽量使用可视的文本流,使用分隔符分割的协议。就是每一个模版信息使用分号“;”隔开,而同一个模版之间的营销案信息使用 波浪号“~“隔开。那么整一个营销案优惠信息就变成了使用;

号和~号隔开的文本,然后将整个文本放入CmdEgnine对象的某一个字段域既可。还可以将整个文本打印在日志中,方便以后的调试和查找BUG。

  不过这存在一个潜在的问题就是:假如营销案信息中存在~和;字符的话就会破坏整个协议的约定内容。所以还必须对营销案的信息内存进行base64编码然后用~和;符隔开。

  整个开发都非常顺利。调试都非常方便,设计很简洁,所有的bug都无所遁形。客户端方面的同事也很满意。

  最大的好处,还是大家都节省了时间和精力,每天下班以后都可以准时的打卡走人



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值