zoukankan      html  css  js  c++  java
  • 再堕噩梦,斩龙之旅

    本周继续做公会功能,有点乏味。

    这次主要是基于上周完成的框架,进行具体功能的协议对接。原本以为对接会很简单,毕竟之前的功能模块都已经写过单元测试了,虽然覆盖率不高,好歹还是能跑通happy path的。实际用的时候,才发现上周设计的api粒度太细了。隐约记得第一次做公会,也是犯了这个错误,api之间是十分正交,每一个完成的功能也很简单,方便测试。但是,用的时候需要调用多个api,因此需要处理多种错误情况,而没有goto语句,又导致需要将同一段错误处理代码多次复制粘贴。

    另一个比较头痛的问题,是目前的网络流是异步IO模型的,导致一段正常的逻辑需要断开多个函数来写,搞得我思维负担很大,有时候还需要在多个文件间来回切换,工作效率不高。异步回调这个无法解决了,除非引入coroutine的模型,可惜目前能力有限,无法向领导层推动这个事情。连游戏的自动测试,都无法推动到商业合作的阶段,真的有点失落。多个文件切换这个,最后用单元测试部分解决了,测好一个函数,对接一个,避免首尾应接不暇轮番报bug。

    为了方便开发,避免频繁更新协议,内部协议采用了JSON作为序列化的工具。因此,很多回调函数的参数都是mapping,类似python里的dict,漏参数在编译器不会报错,运行期会出现各种诡异问题。当年用python写公会的时候,没有想到解决办法,总觉得熬过去就好,反正有QC保证。现在学聪明了一点,写了个入口检查函数,既然不能在编译期检查,就在运行期加上吧,实际尝试后,发现效果拔群!虽然没有做类型检查,只是检查了key值是否有缺失,已经很有帮助了。

    另,最近同事在研习bt软件,用了一个从网上扒拉过来的SHA1算法,然后老是说这个算法改了他的全局变量,导致变量变成一个巨大无比的值。我检查了一下代码,SHA1里没用全局变量,不可能是别人的误改动。后询问得知,这个错误在Linux上不会发生,在mac上编译才会出现。前段时间,引擎从Freebsd迁移到CentOS上的时候,也出现了类似的错误。有可能是内存越界访问导致的,也有可能是某个unsigned的类型定义不一样,(不可能,溢出绕回的话不会变成大于max的值,如果可以大于max就不会溢出了)只是,网上找到的教程都是Unix向Linux移植,没有反方向的,比较囧

    ps:题图是经典的编译原理之龙书,勇士手握LALR文法之剑,持语法制导翻译之盾,向编译器复杂度之真龙发起殊死斗争,题中的斩龙指斩复杂度之龙

  • 相关阅读:
    JavaIO学习笔记(五)
    Java学习笔记(四)
    Java学习笔记(三)
    Java学习笔记(二)
    自己动手实现STL:前言
    Effective C++学习笔记 条款07:为多态基类声明virtual析构函数
    Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
    Effective C++学习笔记 条款05:了解C++默默编写并调用的哪些函数
    Effective C++学习笔记 条款04:确定对象被使用前已先被初始化
    Effective C++学习笔记 条款02:尽量以const,enum,inline替换 #define
  • 原文地址:https://www.cnblogs.com/Lifehacker/p/thoughts_on_api_design.html
Copyright © 2011-2022 走看看