Spring给我的启发

if (rs != null) {
      try {
            rs.close();
      }
      catch (SQLException ex) {
            logger.trace("Could not close JDBC ResultSet", ex);
      }
      catch (Throwable ex) {
            // We don't trust the JDBC driver: It might throw RuntimeException or Error.
            logger.trace("Unexpected exception on closing JDBC ResultSet", ex);
      }
}
//这样做就捕获了所有的异常信息了;Spring中对异常的处理;

spring中工具类的做法值得借鉴:将工具类抽象;
抽象并且构造函数私有,这样外界既不能继承,因为我们不希望这样,你用就是了,别继承,要么自己写一个;
别动我的东西;抽象了外界就不能new对象了,我的方法全都是静态的了,你用就是了,new对象干嘛;
但是如果当工具类中的方法变多的时候,有些方法不是很常用,但是又是必须的,就要写成非静态的;
因此就不完全按照工具类的写法来写
这种做法,其实有替代方案的:将工具类分开,常用的全部静态,不常用的放在一起,都非静态,职责分明;
Spring中的类一般都有这么特点:一个总接口,默认的抽象类,实现了大部分的公有方法;
其他根据子类不同的而处理逻辑不同的方法都抽象,由子类去实现;
由抽象类产生多个子类实现类;这种设计方法体现的是模板方法设计模式;
对于一个架构良好的程序的设计是一个好的参考;
在一个架构中,我们的功能模块是细分的,同一个模块中的内容,可能会有一些相同的代码
这样我们可以进行抽象封装,形成一个通用的抽象类,同时为了扩展型考虑,往往会定义一个通用的接口;
该通用的抽象类实现该通用的抽象接口;
对应具体的业务逻辑:我们往往会这样做,我们具体的业务逻辑也做成一个接口;在该接口中加入我们
特有的业务逻辑方法;
让这个接口继承通用的接口;然后我们具体业务逻辑的实现类继承通用的实现了,然后实现具体的业务逻辑接口;
这样我们即可以做到:获得通用类中已有的方法,而无需在写,同时由于实现了具体的业务逻辑接口,
因为我们具体的业务逻辑实现类只需要实现这部分的业务逻辑方法即可;
这在一个大的系统中显得尤为重要;

继承通用的抽象实现类,实现特有的接口---
这个可以借鉴HttpServletRequestWrappe r;
ServletRequest:通用的request接口;
      ServletRequestWrapper:通用的实现类:
具体的逻辑相关类:
HttpServletRequest:具体业务逻辑接口,继承自ServletRequest
HttpServletRequestWrappe r:具体业务逻辑实现类;
继承通用的实现类,实现了具体的业务逻辑接口;
Spring中接口都是抽象的;但是我认为他的构造函数应该私有;因为工具类就应该是这个样子的;
方法都静态了,继承就没有意义了;
当然我至今没有明白一个:就是在集合框架中的Map:这是一个双列集合中总的通用接口,
他有一个abstractMap,通用的抽象实现了,他实现了这个Map接口;
比如那具体的实现类来说,HashMap,他继承了AbstractMap,并覆盖了其中抽象的方法;
但是我想不明白他为什么还要去实现Map接口,因为他的父类AbstractMap已经实现了这个通用接口;
我只能这么想:这个Map即是一个通用的接口,对于HashMap来说也是一个业务相关的接口;//我说的这个业务
//是广泛的,不仅仅指的是我们实际开发中的业务;
ps:疑问:
1 为什么有写方法明明父接口中已经定义了.子接口为什么还需要继续定义呢?这个让我非常想不通.
  这个设计我也不知道是什么原因造成的.

同样的情况还出现在单列集合中;Set:集合有一个抽象的实现类:称之为AbstractSet:
我们的HashSet集合继承了AbstractSet:同时又实现了Set接口;
List:有一个抽象的实现类,AbstractList:,实现了List接口
我们的ArrayList:继承了AbstractList:实现了List接口;
这种架构设计非常的合理,值得我们借鉴,同时命名规范也很值得考究;
这种设计策略体现了接口隔离原则;ISP:Interface Segregation Principle:客户使用时面向的是具体的接口;
比如,我需要用的是关于Customer的service服务,你就应该设计一个ICustomerService,就是说你给他提供的应该是这个接口
而不是ICommonService这个接口;这就是接口隔离原则的体现;
<script type="text/javascript" id="wumiiRelatedItems"> </script>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值