今天是汤老师讲BBS的第一天,对汤老师是彻底佩服了。年龄大不了我们几岁,可是娴熟的Eclipse快捷键使用,节奏感强的敲击键盘声和对开发流程的深入体会不得不让人叹为观止。
今天汤老师主要对ITCASTBBS做了一个整体的分析以及完成BBSDAO持久层代码的编写。ITCASTBBS主要使用了Struts和Hibernate框架开发,下面照常对今天汤老师ITCASTBBS课程进行归纳总结。
1. 基于MVC的设计模式,层与层之间需要使用接口,不与具体的实现类关联
2. 显示层Struts开发中使用DispatchAction把一组业务相关的方法放在一个类中
3. 设置源码路径,以利于源文件,测试文件和配置文件的分类管理
4. 持久层DAO的设计:
虚线代表实现,实线代表继承,类型参数不确定的情况下,用T,由子类去确定类型参数。
5. 使用ThreadLocal类存储Hibernate的Session实体,以保证线程安全
6. 使用Filter对所有Action请求进行DAO事务异常处理,使用if判断语句处理空指针异常
7. 注意:Hibernate和Struts整合时,commons-beanutils包和commons-collections包中的FastHashMap.class可能冲突。解决方法:Spring开发包中lib下有可以兼容的commons-beanutils包和commons-collections包,替换就O了。
8. 显示层与业务层,业务层与持久层之间通过接口进行关联,接口必须要有具体的实现才能使用,所以会出现大量的new()对象。这里可以使用BeanFactory工厂模式对所有的Service和DAO进行管理,需要使用时调用相应的getBean()方法获取接口的具体实现。
9. BeanFactory工厂的设计:建立properties文件用于存放key和与key相关联的接口实现类,在工具类BeanFactory中建立Map集合用于存放key和与key相关联的接口实现类,getBean()根据不同的键值key返回相应的接口的实例,init()方法读取properties配置文件,然后根据配置生成相应的实例对象,且放在beans集合中。
10. init()初始化方法要保证在第一次调用getBean()方法之前被调用,且只被调用一次,可以使用静态代码块的方法对init()方法进行封装。