新产品开发历时1年多,总算马马虎虎上线试用1个多月了,目前用户量大概300号左右,租户大概10家左右。这里提到一个“新“字,在我没来到这家公司之前其实已经有自己研发的产品(物流管理系统)在使用了,为什么还要推翻老的设计架构重新设计呢,总结主要有以下几点:
数据不准确(如 库存、结算数据等等,数据不准确时还找不到原因,需要手动执行sql直接修改数据库数据。)
维护成本太大(由于开发管理不当、需求不清晰、沟通不充分。导致项目混乱,项目表结构都很混乱,业务逻辑全是存储过程,动不动上千行代码的存储过程。)
速度慢(大量数据本地化处理,本地过多的查询,过多的不必要查询。)
用户体验差(用户不会用,功能隐蔽,反人类设计)
安装成本高(给用户装软件的流程是:准备软件->安装软件->调整参数->培训客户 一圈下来好多细节步骤,占据大量时间)
用户随便点点报错(开发没考虑好逻辑或偷懒没想好一些意外情况,如 数据为null、超出索引等等)
数据安全问题(如何做到保证用户数据的安全)
说实话要解决这些问题难度还是相当大的,当时在公司我能说只有我一个开发。对你没听错就我一个,据说以前的开发经理跑路了~~~哈哈哈。但是作为开发拿到这样的项目,不对,更贴切的叫法应该叫产品。应该是一个难得的机会,怎么说也得上手干一场。刚开始对公司的产品的业务非常不熟悉,许经理给我们进行了大量的业务培训。纵观系统其实很简单就是几条业务线:业务、财务、回单等等。横向技术点有:功能授权、数据授权。其实这里仅仅是表象,内部可不止这么简单。
下面我简单介绍下物流系统中的几大角色(可以简单想成在淘宝购物的物流流程):发货人、收货人、物流公司(含网点、部门、 司机、用户 )、承运公司。这里一些名词还是相对好理解一点,主要解决的就是物流公司这一块,其实物流公司更像是一个集团,网点就像子公司一样,这里的子公司之间呢又存在业务及财务上的往来,所以说里面业务、功能权限、数据权限错综复杂。要解决这些问题并非容易。
为了加快熟悉产品业务,以及理解客户的需求。一上手并没有直接就开始开发新版本,而是基于老软件进行定制开发。现在1年多过去了,我还记得定制的有几个模块还是相当复杂的,加上老软件缺乏文档,代码又不规范且没有注释,最糟糕的是全是存储过程,开发起来难度很大,总结起来有一下几点。
看不懂别人的代码,不明白别人的意图
不熟悉业务,需求理解不透彻,导致不断返工
项目开发中节点不明确,被客户牵着鼻子走
软件遗留bug多,一边开发新功能还要一边解决历史bug
添加新功能,新模块影响到老功能,导致数据不准确,系统报错等一系列问题
这个定制项目,断断续续持续开发了3个多月才告终,做这样的项目真的很磨人的性格。但是这个项目做下来对系统的业务更熟悉了及客户的需求更清楚了,在大哥帮组下对老系统的表结构以及系统设计思想有了进一步的认知,做项目的过程中慢慢把公司中各个同事的职责也弄清楚了。就技术层面老软件很明显的用到的技术相对简单,客户端直接数据库,几乎全部是存储过程,UI方面用的是devexpress+winform(后面简称Dev),数据层用到的微软提供的企业库EnterpriseLibrary,嗯....感觉用这个企业库有点杀猪用牛刀的意思,企业库太重了,功能非常多,但是我们只用了调用存储过程的方法。期间对企业库有过一段时间的了解,由于涵盖内容较多加上技术比较老,用的人已经不多了,所以没有刨根问底的学习这玩意,紧紧处在用的层面,有时候想想还不如一个SqlHelper呢。
经过前面的铺垫终于开始新软件的开发之路,起初2个开发,没有项目经理、美工、测试。全部就是2个开发,一个就是我。还有一个是小呆萌(我学弟,刚刚毕业没有工作经验的那种)加1个经理,经理就是我们公司的boos(后续称大哥,还是挺佩服的,集技术、运维、售前、售后、管理于一身,也是为公司操碎了心 哈哈哈)。前期大哥貌似对项目不怎么上心,虽然参与到项目的开发里面来了,还是很多地方并不是很关心,只有核心技术点上与大哥有沟通。技术上选型是这样的,还是沿用老的winform+dev这一套,但是本质有了变化新产品仅仅把winform+dev用作前端UI开发,后端服务采用的是ef="/wdspsp.html">webapi+ef,数据库采用的是sqlserver(沿用老软件的设计思想 单数据库模式即所有的用户数据用同一个数据库、同一个数据表存放)。总的技术方向有了、总的需求有了下面就需要对系统进行细化,需要搭建框架。下面就从客户端、服务器2个方向入手,细谈第一版为何这样设计以及这样设计有什么弊端,后续如何把自己埋下的炸弹给挖掉。
客户端