最近作了一次架构(流程)的设计,简单来讲,是设计一个流程,提供相应的API,方便其余程序员将业务逻辑逐步迁移到另外一套框架。在完成此次设计的过程当中,仍是有许多经验、教训,值得思考和记录。其实,这些经验总结,可能在其余地方看到过,也听别人分享过,不过只是“夫子言之,于我心有戚戚焉”,只有当本身亲身经历过,才会更加深入。html
本文地址:http://www.javashuo.com/article/p-mwnfhzwz-kk.htmlpython
zen of python中提到 Simple is better than complex.程序员
在google bigtable论文中也提到 The most important lesson we learned is the value of simple designs.架构
具体回到此次设计,因为这些流程都是异步的,且要保证必定的原子性,因此当交互的流程越多,须要维护的状态也会增多,出问题的几率也越大,这样在中途失败的状况回滚也会更麻烦。在最第一版的设计中,流程图差很少有一页A4纸,经过缩减没必要要的流程,最终方案流程图不到半页A4纸,最主要的是,这个流程维护起来更容易,出错的几率更低。框架
固然,流程的简化其实会在某些异常状况下有最终的业务有必定的影响,这其实也是要考虑性价比。less
奥卡姆剃刀原理:如无必要,勿增实体。异步
虽然这个工做主要由我负责,但我发现常常与人讨论仍是颇有用的,无论讨论的对象是老手、仍是小白。测试
若是是有相关经验的老手,每每能一针见血的指出问题所在,好比上面提到的流程简化,就是老手指出来的。若是对方对整个设计比较感兴趣,会问一些为何,这些为何其实能帮助本身思考,由于不少时候,本身并无思考过为何。即便对方不太明白我在干啥,在描述、解释一个细节的时候也经常会有茅塞顿开的感受,与小黄鸭调试法殊途同归之妙。google
这一点其实与第一点相关,流程简化以后,某些状况下部分用户会受到影响,这个产品经理的第一反应是不能接受的。但为了处理这部分异常状况就会使流程变得复杂,技术这边以为性价比低。最后的方案是埋点测试,数据代表会影响的玩家比例很小,PM也就接受了简化后的流程。spa
Talk is cheap,show me the DATA!
这套流程主要是给项目内的其余程序使用,刚开始的时候只与核心程序讨论,并且是泛泛的讨论,致使流程并不彻底符合实际状况。
接口很重要,一旦交付使用,就很难在修改。
这一点是呈上的,因为开始的流程设计没法知足某些业务场景,致使须要修改一些API,但前一版本的API已经在代码中使用,为了修改这些API,须要去与相应程序沟通,你们集中替换、测试。幸亏这些接口都还在内部系统使用,不涉及到线上业务,不然要修改起来就很困难了。
easy to use,hard to misuse,来自 How to Design a Good API and Why it Matters
呈上,在流程中,会有一些默认的action,默认的参数,设计的原则是,这些默认值最可能是代码不能正常工做,而绝对不能默默地以错误的方式工做。
在此次设计中,常常对着流程图、状态机发呆,发现仍是颇有用,能够帮助理清思路,发现异常。跟他人讨论的时候,流程图也比口头描述直观不少。
每一步都要有异常应对,有if 那么就应该对应 else,即便只是打一个日志。
在一个复杂的流程系统中,状态的自愈很是重要,这样即便出现一些异常,也能正常工做
总结了感触最深的几点,不是很系统。