开发中体会大道至简

       还记得老师以前的一堂课上,用了两个图(时域中的正余弦函数和频域中的正余弦函数)讲解了从复杂到简单,大道至简的道理,在随后的开发道路上,我也渐渐明白这个道理,也在实践这个道理。

       这个道理就是我们所处在的复杂世界复杂事物都能够用简单的事物来组成和来表示。正余弦函数如此,编程也是这样。


       最近在做权限管理项目,这个项目让我对这个道理更加有了深刻的认识,大道至简,当我们把复杂问题拆分成简单的问题之后,我们就能从容不迫的解决这些简单的问题,当我们把简单的问题解决掉之后,复杂问题也就相应的得到解决。这就是我今天要说的从复杂到简单,大道至简。


      1、权限项目,业务处理是非常复杂的。

       所以我们Leader把它拆解开来,也就是两个部分,一个是主体,主要是对谁进行授权,一个是针对哪些资源进行授权。对谁又分成了三个主体,角色、用户、用户组;另外用一个关系表来处理他们之间的关系;另外一部分就是对哪些资源进行授权,这里利用模块化的思路,让所有的页面都分成模块,模块里面有操作,页面上面还有相应的系统,这样我们就能把这些资源统一到模块上,其余的资源都是对模块进行的定位或扩展,让操作的值来进行授权的权限计算。


       

       

       这样下来,整个业务也就不再那么复杂。其实所有的开发项目都是在做着这个工作,有些人能够把非常复杂的东西,变成非常简单的问题来处理,这是技能,这也是在学习过程中慢慢培养的素质。


       2、处理复杂的业务单元,要保持清醒的头脑,拆分成一下常见的问题来处理。


       权限项目中,有这样一个业务单元,就是要批量导入一个结构,也就是上面说的系统、页面、模块、操作资源的一个结构。例如其中就有一个批量导入系统结构,主要是通过excel来完成这样一个导入功能,批量导入功能非常常见,但是这里的导入业务单元是非常复杂的。

       怎样处理这样一个复杂的业务逻辑单元呢,我是这样做的,首先分析这个导入的功能其实就是添加,把问题这样想之后,那么实现是没有问题的,关键的就是校验正确性上了。

       校验正确性是非常复杂的,举例来说:


       图1:


 

       

         图2:


 

       

        图3:

 

      

         图4:

 

       

       既然插入已经能够解决了,那么还有一个重要的问题就是读,所以我也首先把这个读的问题利用demo也实现了,就是导入jxl.jar包,动态读出来workbook、sheet、cell的数据就OK了。

       这样这个复杂的业务单元就还剩下校验了。校验复杂,就是因为判断非常多,逻辑性比较强,但是分析之后我发现它无非就是判断这一列的数据是否重复,这里用到的方法就是利用一个数组和一个集合,都将这些数据填充进去,之后比较长度,不同则有重复;还有就是判断这个模块是否属于这个页面,这个是比较简单的就是调用数据库来判断有没有;还有就是模块的排列号,因为模块排列号就是必须保证排列号必须是1到n的不能重复,不能有间隔的数,实现这个方法用到读取模块的数组并且排序和自定义生成的数组(生成1到N的数组)比较两数组是否相等;还有一个处理就是判断操作值是否正确,这里要用到一点数学的关系,就是等比数列,因为操作的值也是从2开始等比的增长,所以就利用数学计算等比数列的和,也是首先把操作值放到数组里,之后用程序获得行数,通过循环算出值的和,最后和pow(2,行数)比较,相等则正确,不等则不正确。

        综合上面的分析,我知道这个复杂的业务其实就是几个简单的小问题,判断数组中的数据是否重复,判断数组中的数据是否有等差数列(具体到这个项目中差值是1),判断数组中的数据是否成等比数列,还有就是读取excel表数据,插入数据库数据。只要把这五点掌握,这个复杂业务单元也是非常简单的。


       3、算是总结吧。

       所以,大道至简,从复杂到简单是一个过程,当处理这个过程的时候,我们要有思考,要学会分析,要学会在分析中获得收获,这些收获是自己下次大道至简的解决之道。学习吧,还有很远的路途要走。

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值