OA项目架构说明和相关准备

1.OA是啥?  
OA是OFFICE AUTOMATION的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理。采用Internet/Intranet技术,基于工作流 的概念,使企业内部人员方便快捷地共享信息,高效地协同工作;改变过去复杂、低效的手工办公方式,实现迅速、全方位的信息采集、信息处理,为企业的管理和 决策提供科学的依据。
OA软件解决企业的日常管理规范化、增加企业的可控性、提高企业运转的效率的基本问题。范围涉及日常行政管理、各种事项的审批、办公资源的管理、多人多部 门的协同办公、以及各种信息的沟通与传递。可以概括的说,OA软件跨越了生产、销售、财务等具体的业务范畴,更集中关注于企业日常办公的效率和可控性,是 企业提高整体运转能力不可缺少的软件工具。

2.我们系统要完成的功能  
1)组织机构管理(部门、岗位、员工)
2)审批管理
3)执行审批流转
4)表单查询

3.分层  
使用两层:
1)表示层(view)
2)业务逻辑层(Service + DAO)
说明:使用两层的架构。因为如果使用三层,在 Service中就会有一部分方法只是直接调用Dao中的方法。
任一层换掉后,其他层不受影响。

4.分层要守的规则  
1)上面调用下面
2)层与层之间使用接口
3)除定义的接口外,不能使用其它层的特有类或接口
4)传递数据使用Domain,即实体,也是PO,在此做为DTO(数据传输对象)用。

5.在这个项目中使用到的技术和框 架.  
Struts 1.3.8
Jstl 1.1
Hibernate 3.2.3 这个是在jbpm3.2中含有的Hibernate3.2
Jbpm 3.2.2
Junit4

6.创建目录结构的说明  
源码文件夹
src        项目源代码
process    流程定义
    config    配置文件
    test    单元测试
文件夹
    docs    文档资料等
WebRoot文件夹下
    script    JavaScript脚本文件
    style    Css样式文件
    WEB-INF/pages    Jsp页面文件(再创建子文件夹分类存放)

7.包结构  
显示层(View)
业务层(Service)
数据访问层(Dao) 
cn.itcast.oa.entity    实体(Domain、POJO)    
cn.itcast.oa.dao    Dao接口    
cn.itcast.oa.dao.impl    Dao的实现类    
cn.itcast.oa.service    Service接口    
cn.itcast.oa.service.impl    Service的实现类    
cn.itcast.oa.web.struts    Struts有关的类    
cn.itcast.oa.web.struts.action    Struts的Action    
cn.itcast.oa.web.struts.formbean    Struts的FormBean(ActionForm)    
cn.itcast.oa.utils    一些工具类    
注意:        
实体的主键类型都使用Long型。因为在后面有的实体是要做为流程变量使用的,Jbpm要求这样的实体的主键类型要为Long型或 String型。
每个实体都应有一个对应的Dao,他封装了对这个实体的数据库操作。

8.DAO层的设计  
在这里我就学到了,几个我原来工作中没有想到的地方.老师的技术很细腻.
这里一样是面向接口编程.但抽出出来一个basedao接口.来把各个接口一样的地方抽取出来.同时对应了一个basedaoimpl的接口实现类.这对 DAO层的实现,可以简化很多代码.
别的模块接口可以集成这个 basedao,直接加上自己特有的dao操作就行. 在实现类中先集成basedaoimpl类,这实现接口.同样简化了重复代码.
这个设计太巧妙了.

上面的设计,里面用到了一个非常经典的代码.来实现了功能.
protected Class clazz;  
    
    public DaoImplBase(){  
        ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();  
        this.clazz = (Class) pt.getActualTypeArguments()[0];  
        System.out.println("-------> clazz = " + clazz);  
    }  


9.事物的处理  
这个老师讲的过程太绝了.我用了那么长时间,都没有理解这么透彻.
老师从自己声明Map到在Map中加key.到最后用的 ThreadLocal.一步一步的优化代码.真的是服了.
使我深刻的理解了.这个技术的由来.不只会用了,还知道了它的优缺点在这里.可以更好的把握.
1)编写一个Hibernate的工具类.在通过工具类来获得Session的时候就打开事物.
2)在filter中进行操作.关闭Session和回滚还有提交.在这个过程中判断是否使用了事物.如果没有使用就不对事物进行操作.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException {  

    try {  
        chain.doFilter(request, response);  
    } catch (Exception e) {  
JbpmContext jc = JbpmContextUtils.getJbpmContext(false);  
    if (jc != null) {  
        jc.setRollbackOnly();  
    }  
    throw new ServletException(e);  
    } finally {  
JbpmContextUtils.closeAndRemoveCurrentJbpmContext();  
    }  
}  

10.解决提交的表单内容的中文乱 码  
所有的页面都将使用utf-8编码,所以提交的表单内容也是utf-8编码。
在过滤器中设置request的编码为utf-8:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  
    request.setCharacterEncoding("utf-8");  
    chain.doFilter(request, response);  
}  

11.BeanFactory的使 用:  
对配置文件的读取,通过反射技术来实现对类依赖的解耦.

你可能感兴趣的:(OA项目架构说明和相关准备)