双十一到了,看看别人总结,我也想码点字。我没有直接为京东的客户端做任何贡献,间接的付出还是有的。可以说,这一年下来,只完成了三件事,接口监控,页面监控以及mock平台。不能说完成的多出色,只能说勉强可用。
尤其双十一期间匆忙间赶了一个chrome插件,加之牵一发动全身导致的沟通困局,让我不得不回过头来反思一下自己的系统。
我是测试开发,虽然在该岗位工作了八年,但与纯粹的开发架构还是有一定差距的。尤其在系统的可扩展性,伸缩性方面。这导致新的需求来,在原来的transction script模式上不断地增加if-else,以及不断地增加额外的变量。除了增大了系统堆空间,大对象也导致了频繁的GC。而且很多实例也根本无法释放。这就好比你写了个list,然后添加了一堆对象,然后紧跟着一次FULL GC,但可惜,老年代还存活着。另外从整体看,这使我想到了3年前亲自代的一个项目,虽然是系统内部用,但跟经典的混乱大都市一样,每个人写自己的模块,到达一个目的地的路径不只一条,没有统一的数据层管理,客户端包涵了过多sql语句,过多的getRuntime.exec(),怎么看都不像一个整体。虽有模块划分,但似乎有不像模块。
尤其前端接了app,又接了pc,后端接口只设计的app的需求,pc加进来就导致代码的有限膨胀。历史原因有之,前期没考虑到有之,总归我觉得还是我跟人架构设计能力存在不足。
首先,已业务逻辑为主线进行设计,考虑后期的扩展。很多阈值的算法很像策略模式,比较适合算法类的逻辑。生成运算汇总采用IOC。接口层一定要单一,落地的数据功能尽量不要加额外的逻辑。真正统一数据层,通用的DAL组建,比如mybatis,避免维护成本。
这么小的系统做的尚且如此,大系统何谈?只有苦练内功,才是正道。今儿在地铁里,就码这么多字吧,手都敲疼了。