我是如何用一个半星期解决了别人可能需要三四个月而且维护成本巨大的功能(解决思路与方法)

端午节临近,也总算稍微闲了那么一点,有时间写上一段博文(装逼)了,嘿嘿

话说四个星期以前,无意中看到老板愁眉苦脸的,并且与技术总监和另一个资深开发的老哥在激烈辩驳着什么,因为好奇心理,就凑上去听了一下.原来是因为老板想做一个报表模块,而且数量不限定,不过暂时需要短时间内做出45张报表,但因为这45张报表的参数,数据表,,数据的计算方式,甚至连格式还有数据的数量都不一致,还有后面因为权限的原因需要一张张表单独授权,导致这些表需要一张张来做.下面给大家看下其中几个类型

差不多就是这样子.然后上交大毕业的技术总监跟另一个西大数学系毕业有着9年工作经验的老哥表示这个只能一张张做,因为拿的数据不一样,参数个数不一样,数据表不一样,数据的计算方式也不一样,这个没有可能短时间做出来.所以老板一脸郁闷.

不过我凑上去看了几眼后,发现,不对啊,虽然数据确实不同,但展现方式的表样式的分类其实并不多啊.

于是,大脑里开始疯狂的运转起来.

首先我们确定需求: 需要短时间开发出45张表,并且需要高扩展性,以及高复用性,因为后面会增加表并且也会增加功能(事实证明确实如此),也就是说,我们将代码最大的可复用化并且可配置化以应对扩展以及可能的修改

现在的问题:参数个数不一样,数据表不一样,数据的计算,表格式不一样,权限需要分开,等等不通点导致没法代码复用也就不能够快速开发出来.

ok,需求和问题都明确了,现在只要确定解决方案就行了.

首先面对参数不同,数据表不同这两点后端的问题,我们可不可以在后端定义一些规则带值过去呢?

但这个问题又引申出第二个问题了,如果带值过去的话,我们现在用的Hibernate能支持这种做法吗?想了下,好像不行,那么只能用可定制化最高的JDBC了,但是JDBC在查询的时候需要明确字段名和类型,字段名我们可以传过去,类型呢?还有,把数据表结构暴露在

前端,安全问题怎么办?问题明确了,继续解决,类型我们可以自己定义规则在后端用字符串切割的方式去拿到我们想要的数据,就跟那些自定义协议一样,而安全,我们则可以通过加密保证暗码性,让你看到又怎么样?看到的都是一串无法逆向的加密数据呀.

在一分钟里将全部过程在脑子里全部过了一遍,并且确认可以跑通后,就跟老板说了一句,这个问题我来解决吧,而老板听了我的思路后,也就同意了下来.

Ok,问题解决了,我们来看下具体怎么做的吧.

就像这样,MD5Utils是自定义的工具类,其实里面还有sha之类的编码和加密等各种各样的格式,以保证暗码性,前端传数据的时候拿到对应的表结构的加密数据,到map里再去拿对应的值,

给大家解释下规则:  ;这个符号代表的是每个不同的参数,数据结构中的-代表的是字段名和其类型,=是字段与字段之间的区分,

OK,照着这个思路大家应该知道后端怎么做了吧?继续下一个,我们现在解决了后端的代码复用性,那么前端呢?其实前端更简单,我们将功能模块化就行了

你想要什么样的格式,我就抽出来,这样后面再碰到跟你一样的,我就可以直接复用了.PS:命名有点问题,请勿吐槽

你看,本来这么多张表,还有各种各样的条件,这想起来是个多么大的问题啊,但只要我们确定需求和问题,在顺着问题一个个分化解决就行了,说白了,这个就和追女孩子一样,首先确定目标,再想着追这个女孩子要什么条件,有什么困难,再把这些困难分解成一个个小困难,在脑子里列出来(脑子不好的可以列在纸上),一个个解决.

这样,只要你把无数个小困难通通解决了,不管多么漂亮的女孩你都会追到哒(才怪,除非你长得像我这么帅)

最后,得益于我这种做法,我在这么短的时间里,不但做好了这几十张表,而且还扩展出了,评论,图形展示,权限控制,导出,等各项功能(后面还会加上机器学习将数据报表分析智能化,预警化).如果一张张做的话,可以想象,要每张表都重复写上这些功能,得多.....

好啦,废话不多说,展示下成果吧.(PS:前端除了逻辑外,有很多样式和特效也都是我写的哦)

原文地址:https://www.cnblogs.com/yangfeiORfeiyang/p/9184412.html

时间: 2024-08-08 09:32:30

我是如何用一个半星期解决了别人可能需要三四个月而且维护成本巨大的功能(解决思路与方法)的相关文章

我是平民:一个平民怎样投资房产致富

我反问:"房价是不是没有跌7你没有告诉我你要买房,否则我会让你再等两个月." 后来房价上涨速度非常之快.其实不到半年,他的房价涨幅已经超过了税款的额度. 我看透明售房系统 又如透明售房系统.杭州向上海学习,于2004年下半年启动了透明售房系统,推动新建楼盘的公平销售.挤走房产投机者.一般人看来,这个系统必定给消费者以公平的机会,但是实际上并不完全是这样的. 我一直关注下沙的小户型房产.2005年元旦.下沙的"十六街区"即将开盘,我收到房产公司的邀请专门去听了他们的楼

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

Quartz 设置一个半小时任务实现

该文章属于本人原创,转载请注明出处. spring + Quartz 设置定时任务时要求没一个半小时执行一次 设置两个相同的定时任务 第一个从整点开始每三小时执行一次 <!--每三小时执行一次任务,从整点开始--> <property name ="cronExpression" value="0 0 0/3 * * ?"></property> 第二个从一个半小时后开始每三小时执行一次 <!--每三小时执行一次任务,从一个

说明如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢。注意PUSH和POP操作的时间应为O(1)。

校招开始了,发现自己数据结构,Algorithms的知识都还给老师了.喵了个呜的! <算法导论>开啃吧~ 从第三章数据结构开始吧~ 10.1-2 : 如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢.注意PUSH和POP操作的时间应为O(1). 解:思想是,建一维数组,两个栈stack1和stack2分别从数组A[0]和A[N-1]开始push,栈指针相遇时,两个栈中元素总数为n. 在思考怎么用java 实现,晚些时候 上代码吧~

Crontab每一个半小时执行一次脚本写法

前段时间面试的时候,突然被问到一个问题,“在Linux中,如果有一个脚本,需要每隔一个半小时执行一次,应该怎么写?” 一时间没有回答上来,后面回来之后,想了一下才搞明白. 先把所有的执行脚本的执行时间列出来,就明白是怎么回事了. 01:30 03:00 04:30 06:00 07:30 09:00 10:30 12:00 13:30 15:00 16:30 18:00 19:30 21:00 22:30 00:00 把所有的执行时间分成两列,这就容易找到规律了. 整点的时间和整30分的时间跟下

解决版本不一致:Project facet Java version 1.8 is not supported解决记录

http://blog.csdn.net/dingchenxixi/article/details/51496998 一看知道是因为jdk版本不一致所导致,如何解决? 方法一: 选中项目 Properties , 选择 Project Facets,右击选择 Java , Change Version 方法二: 在 项目的目录下有一个.settings的文件夹,该文件夹下有一个org.eclipse.wst.common.project.facet.core.xml文件,内容如下; <?xml

写代码的思路之写一个功能的思路

如果让你实现一个功能,你要完成这个功能的一般思路是什么? 我是一位初学者,希望和大家共享下我在书写代码时的思路,希望对大家有帮助. 以下是我实现一个简单‘日历“这一功能的思路: 当我决定要做一个日历的时候,我会先制作一个”日历“模型,即要实现的”日历“的模型(样子),我用控件制作的: 之后我会按照”日历“模型上面的控件从上到下,从左到右依次声明,但先不实现: 之后一个控件一个控件实现,在设计控件的属性的时候是严格按照之前”日历“模型的属性,这会提高效率: 一个控件实现了之后要做一次测试,保证该控

PHP解决抢购、抽奖等阻塞式高并发库存防控超量的思路方法

如今在电商行业里,秒杀抢购活动已经是商家常用促销手段.但是库存数量有限,而同时下单人数超过了库存量,就会导致商品超卖甚至库存变负数的问题. 又比如:抢购火车票.论坛抢楼.抽奖乃至爆红微博评论等也会引发阻塞式高并发问题.如果不做任何措施可能在高瞬间造成服务器瘫痪,如何解决这个问题呢? 这里提出个人认为比较可行的几个思路方法: 方案一:使用消息队列来实现 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧 比如有100张票可供用户抢,那么就可以把这100张票放到缓存中,读写时不

解决提示Value &#39;0000-00-00 00:00:00&#39; can not be represented as java.sql.Timestamp;的方法

Mysql在进行查询时报了一个 Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp; 这样的错误,这是因为在默认插入一个类型为timestamp的时间时它会将'0000-00-00 00:00:00'插入,但是在数据库定义时又因为设计是非空的timestamp类型的时间,所以查询时就会出错,并且mysql的时间范围是:'1000-01-01 00:00:00' 到 '9999-12-31 23:59:5