zoukankan      html  css  js  c++  java
  • 对一次架构设计的总结和反思


      最近做了一次架构(流程)的设计,简单来说,是设计一个流程,提供相应的API,方便其他程序员将业务逻辑逐步迁移到另一套框架。在完成这次设计的过程中,还是有许多经验、教训,值得思考和记录。其实,这些经验总结,可能在其他地方看到过,也听别人分享过,不过只是“夫子言之,于我心有戚戚焉”,只有当自己亲身经历过,才会更加深刻。

      本文地址:https://www.cnblogs.com/xybaby/p/9763030.html

    简单就是美

      zen of python中提到 Simple is better than complex.

      在google bigtable论文中也提到 The most important lesson we learned is the value of simple designs.

      具体回到这次设计,由于这些流程都是异步的,且要保证一定的原子性,所以当交互的流程越多,需要维护的状态也会增多,出问题的概率也越大,这样在中途失败的情况回滚也会更麻烦。在最初版的设计中,流程图差不多有一页A4纸,通过缩减不必要的流程,最终方案流程图不到半页A4纸,最主要的是,这个流程维护起来更容易,出错的概率更低。

      当然,流程的简化其实会在某些异常情况下有最终的业务有一定的影响,这其实也是要考虑性价比。

      奥卡姆剃刀原理:如无必要,勿增实体。

      

     多跟人讨论

      虽然这个工作主要由我负责,但我发现经常与人讨论还是很有用的,不管讨论的对象是老手、还是小白。

      如果是有相关经验的老手,往往能一针见血的指出问题所在,比如上面提到的流程简化,就是老手指出来的。如果对方对整个设计比较感兴趣,会问一些为什么,这些为什么其实能帮助自己思考,因为很多时候,自己并没有思考过为什么。即使对方不太明白我在干啥,在描述、解释一个细节的时候也常常会有茅塞顿开的感觉,与小黄鸭调试法异曲同工之妙。

      

    用数据说话,而不是脑补

      这一点其实与第一点相关,流程简化之后,某些情况下部分用户会受到影响,这个产品经理的第一反应是不能接受的。但为了处理这部分异常情况就会使流程变得复杂,技术这边觉得性价比低。最后的方案是埋点测试,数据表明会影响的玩家比例很小,PM也就接受了简化后的流程。

    Talk is cheap,show me the DATA!

    与使用者沟通,尽早给出可体验的原型

      这套流程主要是给项目内的其他程序使用,刚开始的时候只与核心程序讨论,而且是泛泛的讨论,导致流程并不完全符合实际情况。

      

    接口设计追求One Take

      接口很重要,一旦交付使用,就很难在修改。

      这一点是呈上的,由于开始的流程设计无法满足某些业务场景,导致需要修改一些API,但前一版本的API已经在代码中使用,为了修改这些API,需要去与相应程序沟通,大家集中替换、测试。幸好这些接口都还在内部系统使用,不涉及到线上业务,否则要修改起来就很困难了。

      

    好的接口 

      easy to use,hard to misuse,来自 How to Design a Good API and Why it Matters

      呈上,在流程中,会有一些默认的action,默认的参数,设计的原则是,这些默认值最多是代码不能正常工作,而绝对不能默默地以错误的方式工作。

    流程图 状态机帮助思考与讨论

      在这次设计中,经常对着流程图、状态机发呆,发现还是很有用,可以帮助理清思路,发现异常。跟他人讨论的时候,流程图也比口头描述直观很多。

    墨菲定律

      每一步都要有异常应对,有if 那么就应该对应 else,即使只是打一个日志。

      在一个复杂的流程系统中,状态的自愈非常重要,这样即使出现一些异常,也能正常工作

      

      总结了感触最深的几点,不是很系统。

  • 相关阅读:
    一起学windows phone7开发(二十四. Task 补遗)
    一起学windows phone7开发(二十.一 正式版中新增的 Panorama 和 Pivot Project)
    一起学WP7 XNA游戏开发(四. Input)
    一起学WP7 XNA游戏开发(五. Sound)
    一起学windows phone7开发(二十一.三 Map 控件深入学习)
    Daisy.wp7.Controls自定义的控件库
    一起学windows phone7开发(二十二.使用系统资源)
    一起学习Windows Phone7开发(二十三 Windows Phone7 Toolkit 补遗)
    一起学windows phone7开发(二十一.一 Silverlight bing map控件与 Pone7 map控件的比较)
    第一次试验报告
  • 原文地址:https://www.cnblogs.com/xybaby/p/9763030.html
Copyright © 2011-2022 走看看