最长的7天

Posted on Fri 14 October 2016 in 我记

十一7天长假有多长,节后7天工作日就有多长。总算熬到最后一天了。

从昨天开始雾霾,据说要持续到周六。还没入冬就这样了,等供暖季开始了还得继续恶化呀。

今日天气

最近试用了一下摩拜单车,骑着稍微有点儿沉,地上有坑的时候有点儿颠,但毕竟比两条腿省劲,近距离也比其它交通工具都实惠。 就有一个小缺点:想骑的时候找不到空车。所以今天这个情况真难得。这个算不算雾霾天的好处呢?

摩拜单车

趁着业务不忙,读了一个核心服务的代码。

上个月重写了一个服务,对代码质量其实是有心理预期的。结果eclipse刚打开工程,就被13处Error(13 Items)惊呆了

Description Resource    Path    Location    Type
Access restriction: The type 'BASE64Decoder' is not API (restriction on required library '/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/rt.jar')  JdRSAUtil.java  /src/main/java/com/*/*/util/jdwy    line 42 Java Problem

为什么不要直接调用sun.*。在eclipse的编译警告中,Forbidden reference(access rules)对应的就是Error。负责这个服务的“Java工程师”要么是在eclipse中忽视了工程Error,要不然就是用的默认忽略这类问题的IDE--明飞说IntelliJ IDEA就不显示这种错误,哪天有功夫试一下。

到底都引用什么了?看了一下,其实就是Base64编码/解码两个函数。无论是import还是引用,每次指向sun.*(BASE64Encoder/BASE64Decoder)都会产生一个Error。

为就啥俩函数还引用了这么多次呢?自然是历代“Java工程师”们 Copy Paste 大法,两个函数分别在3个类里进行了一模一样的定义:

  • 一个类(liujinhua@2014年10月)中的方法没有任何地方引用,直接删掉;
  • 另外一个类叫XXService(wangyuanyuan@2015年7月),把方法删掉,把到这里的引用都指到JdRSAUtil;
  • 最后重新JdRSAUtil(lijunfu@2014年4月)中的方法,把这两个函数替换成org.apache.commons.codec.binary.Base64来实现

折腾完了再写一个Base64Test,验证新老方法的结果是一样的。写测试类的时候发现,这个工程里面没有引入JUnit。

之前的工程师在test路径下留下了3个类,都和测试不搭界

  1. 一个JedisTest就是试验怎样访问Redis
  2. Test.java就是把一些字串进行加密。对字串的赋值是有上百行被注释掉的,感觉这像一个工具类
  3. DataInitialization.java,这个最厉害,从注释上的解释看是更新业务信息的。 虽然之前的工程里连Junit都没引入,我还是怀着侥幸心理问了一下核心功能都是怎么测试的,但结果实在让人扫兴:现在的工程师没有留下一行与测试有关的代码。

这个服务从业务角度可以拆解出3个功能,老夫继续出手:

  • 在仲阔的帮助下,完成了第一个中的前半部分。主要是对某个字段的长度有要求,但在调用出错的过程中,服务是不会告诉你为什么的
  • 第三个就是一个通知,应该很简单的,等我先把代码逻辑理一理
  • 最难写的是第二个,难度系数=业务逻辑m * 交互逻辑n。m和n的复杂度都不小。之前我就奇怪,为啥接入一个通道一周都干不完,现在也能知晓大致原因了。

这周还抽空看了Netty User guide for 4.x。写得真好,很受启发。要不是在拾掇现在这个项目,完全可以开始我的基于netty v4的服务框架了。