好的代码结构明确,组成清晰分明,功能显而易见。
代码其实就是在给计算机画行走路线图,第一步做什么,第二步怎么判段,第三步根据数值设定不同逻辑。。。
所以开始要先想好“这件事”该这么干,也是在想让电脑怎么操作得到“想要的结果”。
比如我现在正在做的:Excel数据解析,数据的格式复杂,需要将横向的列和纵向的列结合起来一起存,比如如下图:这里的年份会很多,可以一直到2025年。
业务要求是将每年的、每个专业的各个费用信息存入数据库。
这里可能是多个学校的,每个学校的年份数量不一样,怎么写通用代码呢?
通过方法获取到一个List<List<Object>>的数据集合,那么怎么组装成想要的对象了?
。。。
数据库的字段很好设计:年份、学科编号、专业名称、学费、住宿费、班费、体检费、军训费。
那么怎么快速组装成这样的数据了?
。。。
这里首先就要想好怎么处理这个年份的事,这里还算简单,每行就能组装成多个完整数据对象,有的需求会更麻烦,数据包含多行。。。
分析:
前两列的数据数据是固定的。
每个年份包含多个列。
数据是一行一行for遍历的,每行可以组装多个对象(几个年份几个对象)
所以这里首先就要确定的是:有多少个年份、每个年份对应的列序号,可以通过读取第一行可以获取到没年对应的序号,我们可以存入Map<年份,List<Index>>的数据集合中,这样就可以确定每个年份对应那些列了。
这样可以在List<List<Object>>执行for遍历中,在年份数据的Map<年份,List<Index>>,然后根据每年的list序号就可以取到对应位置的值,就可以组装对象了。
这样就能理清楚怎么处理这个需求了,之后就是实践了,代码不贴出来,心里也知道该怎么一步一步写代码了吧!
思路清晰后,只要细心点就能一次性将代码完成吧!
所以遇到复杂的需求,首先要理清楚怎么做,想清楚了,就能一气呵成。。。
另外一个好处是:看到结果不对,就很快知道那一部分出了问题,因为你已经将整个处理流程都熟记于心了。。
这个例子或许对于某些大神来说并不复杂,或许有更好的办法。
但是对于智商一般的我来说,也是经理过一段时间的琢磨才想到的,也是我的灵光乍现,不喜勿喷。。。
另外,个人觉得每个人都应该有自己一套“代码生成器”,自己喜欢的代码风格的代码生成器,这也是很有利于快速开发的。
代码生成器生成的代码中包括增删改查等操作,可以极大节省重复的工作;
如果xml中使用sql的,也需要有一套增删改查的动态sql的方法,值得强调的是xml中一定要保留一套干净的单表操作的增删改查操作的方法,也尽量建动态通用的方法,避免一个查询条件一个方法的情况,乱而杂,还很耽误时间,很不利于复用。
比较喜欢的是芋道源码中的封装,简洁又实用(LambdaQueryWrapperX):这个是写在mapper中,重构了查询分页的方法,使用LambdaQueryWrapperX对参数统一判断,非常实用又简洁,非常完美,有兴趣的可以去搜搜看看。
那些重复的部分用代码可以快速生成,然后只需要在service中增加业务逻辑就行,这个是比较常见的节省时间的方法。