入职后遇到的第一个跨不过去的坑
情景:因为原有的后台系统报表无法满足现在的需求,所以想要自己重新开发,然后任务到我这里了,接到这个需求,首先就是问了数据库连接地址,还有询问是否有相关的设计文档,告知并没有,所以我只拿到了一个连接地址;
1.登录数据库地址,因为是oracle的,所以需要是用支持oracle的工具,因为没有用过所以折腾了半天,成功连接,然后发现一大堆乱七八糟的表,全部大写,而且没有规则,本来初衷是看看表有没有注释,连续点了几十张表后发现并没有,主动放弃了,(这里也包含了字段没有注释);所以两眼一抹黑,什么东西都没,我只有数据结构,又想来个望文生义吧,是知道了一些表,但是更多的表还是不知道,而且这也是靠猜测的并不准确,并且也不清楚哪些表实际是在使用的;
2.本想着算了,就这样吧,跟领导说这个需求实现不了,没有相关文档,然后我想再挣扎一下,去系统里找到一个java项目,现在正在跑的,了解到该项目就是用来同步数据以及,沟通线上线下数据,思考:我在这个项目里里面只要找到相关的bean文件,差不多应该就是系统所有的那些表,说干就干;
3.将编译后的项目拷出来(没办法,你没有源代码),放入idea中进行反编译,可以看到代码,但是没有任何注释,而且很多变量名也都不对,我只能找相关的entity,最终也让我找到了,(心里那个开心啊),跟领导说,差不多表都找到了,只要把数据转移出来我就可以做一些相关业务了(因为那台数据库是在内网环境,我无法用我的电脑主机去访问,这样后续的开发测试就没法进行)
4.第二天,我开始创建表,将oracle中的数据通过程序转移到我本地的mysql中,在这个过程中我又思考了(是不是就这么些表呢,在去翻翻原有的后台系统,对那些人员的统计,业务分成什么的怎么实现呢,这些表根本没有啊,感觉不对劲),我又去找后台项目的代码,发现使用asp写的一个前端服务和后台服务,这个源代码好找,轻松找到了。
5.将源代码拷出来查看,发现有一大堆sql文件,没办法只能一个个看,找各种用到的表,最终也让我找到了。大概又整理了30多张在使用的表,还有很多没有数据的表虽然sql有用到,但是数据为空,基本判定没有使用,这些表就算了,重点来了还有很多视图的使用,由于我对oracle并不熟悉,所以我并不知道视图是怎么产生的,而且这些视图的作用是什么,同时oracle数据库中还有很多函数,这是不是有什么影响;
6.其实这些都不是难题,最大的难题还是在于没有任何的数据库设计文档,也没有详细的系统说明文档,包括整个系统的使用,没有任何文件保存下来,这个让我根本无法去了解整个系统,到这里我只能很不好意思的跟领导说一下不能实现了,有点羞愧!毕竟之前答应了;
7.其实还有一个解决方案,就是采用访问原来的后台系统接口,通过http调用,获取数据,然后组装出最终结果,因为后台系统的数据是已经结构化好的,而且有中文意思,可以直接看懂,但是接口返回的数据是html字符串,解析出需要的数据时,可能比较麻烦,而且访问该接口时需要通过登录校验,这个不难,但是这样做的话,导致新的程序会依赖该后台程序,而且对这个后台程序也不是很熟,并不能保证不会出其他问题,不敢像之前一样说可以做了,害怕之后再出来什么问题,导致这个方案不可行,不过如果必须要实现的话,只能用这个方案,而且感觉很恶心,需要用中文去筛选出需要的字段,因为没有任何字段名返回,加入该接口返回的是json字段的话就很好做了;
由此引发出:
以后任何相关系统的设计,网站的设计,数据库表的创建,一定要有文档保存下来,不然让之后接手的人会骂娘的,因为每个人的想法都不一样,没有说明书,谁也不知道你的想法是什么,一下子体现出了文档的重要性,包括验收项目或者买第三方软件的时候,一定要问他们索要详细的说明书,源代码,还有数据库设计文档,以及数据库注释等,并且创建表的时候就应该写上表的用途,还有字段的意思;不然后人没法接手。
说说:公司原有的系统根本无法接手,以后很可能会限制企业的发展,这可能也是使用外包软件或者购买第三方软件的坑;