我是如何用一个半星期解决了别人可能需要三四个月而且维护成本巨大的功能(解决思路与方法)
Posted yangfeiorfeiyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是如何用一个半星期解决了别人可能需要三四个月而且维护成本巨大的功能(解决思路与方法)相关的知识,希望对你有一定的参考价值。
端午节临近,也总算稍微闲了那么一点,有时间写上一段博文(装逼)了,嘿嘿
话说四个星期以前,无意中看到老板愁眉苦脸的,并且与技术总监和另一个资深开发的老哥在激烈辩驳着什么,因为好奇心理,就凑上去听了一下.原来是因为老板想做一个报表模块,而且数量不限定,不过暂时需要短时间内做出45张报表,但因为这45张报表的参数,数据表,,数据的计算方式,甚至连格式还有数据的数量都不一致,还有后面因为权限的原因需要一张张表单独授权,导致这些表需要一张张来做.下面给大家看下其中几个类型
差不多就是这样子.然后上交大毕业的技术总监跟另一个西大数学系毕业有着9年工作经验的老哥表示这个只能一张张做,因为拿的数据不一样,参数个数不一样,数据表不一样,数据的计算方式也不一样,这个没有可能短时间做出来.所以老板一脸郁闷.
不过我凑上去看了几眼后,发现,不对啊,虽然数据确实不同,但展现方式的表样式的分类其实并不多啊.
于是,大脑里开始疯狂的运转起来.
首先我们确定需求: 需要短时间开发出45张表,并且需要高扩展性,以及高复用性,因为后面会增加表并且也会增加功能(事实证明确实如此),也就是说,我们将代码最大的可复用化并且可配置化以应对扩展以及可能的修改
现在的问题:参数个数不一样,数据表不一样,数据的计算,表格式不一样,权限需要分开,等等不通点导致没法代码复用也就不能够快速开发出来.
ok,需求和问题都明确了,现在只要确定解决方案就行了.
首先面对参数不同,数据表不同这两点后端的问题,我们可不可以在后端定义一些规则带值过去呢?
但这个问题又引申出第二个问题了,如果带值过去的话,我们现在用的Hibernate能支持这种做法吗?想了下,好像不行,那么只能用可定制化最高的JDBC了,但是JDBC在查询的时候需要明确字段名和类型,字段名我们可以传过去,类型呢?还有,把数据表结构暴露在
前端,安全问题怎么办?问题明确了,继续解决,类型我们可以自己定义规则在后端用字符串切割的方式去拿到我们想要的数据,就跟那些自定义协议一样,而安全,我们则可以通过加密保证暗码性,让你看到又怎么样?看到的都是一串无法逆向的加密数据呀.
在一分钟里将全部过程在脑子里全部过了一遍,并且确认可以跑通后,就跟老板说了一句,这个问题我来解决吧,而老板听了我的思路后,也就同意了下来.
Ok,问题解决了,我们来看下具体怎么做的吧.
就像这样,MD5Utils是自定义的工具类,其实里面还有sha之类的编码和加密等各种各样的格式,以保证暗码性,前端传数据的时候拿到对应的表结构的加密数据,到map里再去拿对应的值,
给大家解释下规则: ;这个符号代表的是每个不同的参数,数据结构中的-代表的是字段名和其类型,=是字段与字段之间的区分,
OK,照着这个思路大家应该知道后端怎么做了吧?继续下一个,我们现在解决了后端的代码复用性,那么前端呢?其实前端更简单,我们将功能模块化就行了
你想要什么样的格式,我就抽出来,这样后面再碰到跟你一样的,我就可以直接复用了.PS:命名有点问题,请勿吐槽
你看,本来这么多张表,还有各种各样的条件,这想起来是个多么大的问题啊,但只要我们确定需求和问题,在顺着问题一个个分化解决就行了,说白了,这个就和追女孩子一样,首先确定目标,再想着追这个女孩子要什么条件,有什么困难,再把这些困难分解成一个个小困难,在脑子里列出来(脑子不好的可以列在纸上),一个个解决.
这样,只要你把无数个小困难通通解决了,不管多么漂亮的女孩你都会追到哒(才怪,除非你长得像我这么帅)
最后,得益于我这种做法,我在这么短的时间里,不但做好了这几十张表,而且还扩展出了,评论,图形展示,权限控制,导出,等各项功能(后面还会加上机器学习将数据报表分析智能化,预警化).如果一张张做的话,可以想象,要每张表都重复写上这些功能,得多.....
好啦,废话不多说,展示下成果吧.(PS:前端除了逻辑外,有很多样式和特效也都是我写的哦)
以上是关于我是如何用一个半星期解决了别人可能需要三四个月而且维护成本巨大的功能(解决思路与方法)的主要内容,如果未能解决你的问题,请参考以下文章