资源描述
OA系统设计
1. 整体说明
1.1. 项目说明
1.1.1. OA概述
OA是Office Automation缩写,本意为利用技术手段提升办公效率,进而实现办公自动化处理。实现信息化、无纸化办公,可方便生成统计报表等。
OA是OFFICE AUTOMATION缩写,本意为利用技术手段提升办公效率,进而实现办公自动化处理。采取Internet/Intranet技术,基于工作流概念,使企业内部人员方便快捷地共享信息,高效地协同工作;改变过去复杂、低效手工办公方法,实现快速、全方位信息采集、信息处理,为企业管理和决议提供科学依据。
OA软件处理企业日常管理规范化、增加企业可控性、提升企业运转效率基础问题。范围包含日常行政管理、多种事项审批、办公资源管理、多人多部门协同办公、和多种信息沟通和传输。能够概括说,OA软件跨越了生产、销售、财务等具体业务范围,更集中关注于企业日常办公效率和可控性,是企业提升整体运转能力不可缺乏软件工具。
1.1.2. 本系统作用
组织关键竞争力源自单位对内外部资源有效利用。对它们之间关系进行协调,最大程度发挥全部资源作用,并用系统见解,在整个系统价值最大化基础上来发挥各个资源作用,使资源运作产生协同效用。所以可经过协同办公系统打造单位关键竞争力。本协同办公系统关键作用为:
1、 建立内部通信平台。
2、 建立信息公布平台。
3、 文档管理自动化。
4、 工作步骤自动化。
5、 行政日常事务处理。
6、 安全机制可靠性。
本系统意在加速单位信息化进程,充足利用计算机和现代通讯手段面向单位服务。建立单位内部信息交流快速通道,以共享信息资源。强化部门业务管理,加强各业务部门之间交流。实现单位信息快速上传下达,促进协同办公。提升办公效率,为各级领导及业务人员提供辅助办公和决议服务。
1、 本系统将最大程度地提升办公效率和办公质量,降低管理和办公成本,改善办公环境和条件,提升办公管理和决议自动化和科学化水平。
2、 以人为中心,致力于帮助用户实现共享资源、规范步骤、推进实施目标。帮助用户节省办公费用,降低中间步骤,优化业务步骤,提升整体效率,促进管理进步。
简单说,有以下两点:
1,利用技术手段提升办公效率
2,信息化,可方便生成统计报表等。
1.1.3. 设计标准
以应用为关键,要突出“实用、易用、简练、稳定”。既重视实效,满足用户现实需要,又为系统后续升级和扩展留有余地。在技术实现上,要突出“结构清楚、实现合理、通俗易懂(简单)”。
1. 实用:满足用户现实需要,处理实际问题,做细关键功效。
2. 易用:使用方便,各项功效一目了然。满足用户使用习惯,易使用、易维护、易升级。实现“傻瓜”式操作,将实施、培训成本和周期降到最低。
3. 简练:页面简练,功效简练,每一个元素全部有存在意义。
4. 稳定:从底层数据库到功效层经过严格测试,能在不一样硬件环境中长久平稳运行。
1.1.4. 功效说明
OA是辅助办公软件,使用OA和不使用OA相对比好处是:能够用计算机管理全部数据,并能够方便实现统计和报表功效。提升办公效率。(实现信息化)。
以下是一个OA系统全部功效列表:
说明:不是全部OA全部有全部功效,而是依据需求确定。
1.2. 项目实现说明
1.2.1. 软件开发步骤说明
需求确定—概要设计—具体设计—编码—单元测试—集成测试—系统测试—维护。
单元测试是由程序员自己来完成,最终受益也是程序员自己。能够这么说,程序员有责任编写功效代码,同时也就有责任为自己代码编写单元测试。实施单元测试,就是为了证实这段代码行为和我们期望一致。
集成测试,也叫组装测试或联合测试。在单元测试基础上,将全部模块根据设计要求(如依据结构图〕组装成为子系统或系统,进行集成测试。实践表明,部分模块即使能够单独地工作,但并不能确保连接起来也能正常工作。程序在一些局部反应不出来问题,在全局上很可能暴露出来,影响功效实现。
系统测试是将已经确定软件、计算机硬件、外设、网络等其它元素结合在一起,进行信息系统多种组装测试和确定测试,其目标是经过和系统需求相比较,发觉所开发系统和用户需求不符或矛盾地方,从而提出愈加完善方案。
1.2.2. 在项目开发中,我们处于什么位置,要做哪些事情?
1.2.3. 在课堂上,我们要完成哪些功效,具体需求是什么?
模块
功效
说明
组织和用户管理
岗位管理
部门管理
用户管理
系统权限
初始化权限
分配权限
验证权限
网上交流--论坛
版块管理
看帖、发帖、回帖
文章管理
审批流转(工作流)
表单模板管理
审批步骤管理
审批流转
表单查询
说明:按列出次序实现功效。效果以静态页面为准(需求)。
按静态页面做
1.3. ItcastOA整体设计
1.3.1. 分层
一、JavaEE三层架构
二、相关分层说明
1,上面调用下面,即View调用Service,Service调用Dao。
2,层和层之间用接口。除定义接口外,不能使用其它层特有类或接口。
3,使用实体作为DTO(Data Transfer Object,数据传输对象)
要做到任一层换掉后,其它层不受影响。我们在此项目中使用两层:View+Service即在Service中直接操作Hibernate.Session。因为假如使用三层,在Service中就会有一部分方法只是直接调用DAO中方法。通常情况下只有在多个数据源场所下适合引入DAO层。
三、相关分层多个问题
1,一定要分层吗?
不一定。假如企业要求你写一个能够给指定职员发送短信小程序,用于开会通知和自动发送生日祝福短信。这个程序很小,没有多少行代码,而且不变,这时不分层能够吗?完全能够呀。但我们在写程序时,还是要分层,分层程序结构清楚,可维护性高。
2,一定要3层吗?
不一定。分3层是推荐,而不是必需,应依据自己具体情况进行安排。我们假如使用3层结构,用起来就麻烦,因为在Service中会有一部分方法只是直接调用Dao中方法,而Dao中方法只是调用Session完成某操作。此时分2层愈加好,即在Service中可直接操作Session,以简化结构。其实Hibernate已经能够支持多个数据库。
3,一定要使用接口吗?
不一定。以前就有同学问我:“在设计程序时确定技术在开发完成后通常不会更换,实现类通常也不会更换,这种情况还用接口吗,通常小项目是不是能够不使用接口?”。是,假如不会变(通常也不会变),这是完全能够。
我们所学习框架、技术全部是处理问题推荐方案,而不是必需要用。碰到问题后优先使用成熟技术和方案,以避免很多潜在问题,避免走无须要弯路。
1.3.2. 所用框架、技术
编号
工具
版本
说明
1.
Struts 2
2.1.8.1
2.
Hibernate
3.6.0
实现持久化操作
3.
Spring
2.5
4.
jBPM
4.4
工作流支持
5.
Junit
4
单元测试
6.
jQuery
1.4
说明:还有jQuery.validate和jQuery.treeview等小插件
1.3.3. 开发环境
操作系统
Windows XP
开发工具
MyEclipse 8.6
Eclipse
数据库
MySql 5.0.22
Web容器
Tomcat 6.0
浏览器
IE 6
说明:
1, 推荐使用MyEclipse,这么出现工具问题能够一起处理。当然也能够使用自已熟悉工具,如Eclipse、NetBeans、IntelliJ idea。现在关键是代码实现,不是工具。应使用有效工具。
2, 要注意使用MySql和JDBC驱动版本要兼容。
3, 显示技术(js, css)有兼容问题,写出代码可能在一些浏览器中不能正常运行,这就需要在写代码时多使用JS框架,让框架帮我们处理兼容问题。
1.3.4. 代码规范
1, 命名:使用驼峰命名法。
a) 类、接口:每个单词首字母大写。例:MyDateConverter
b) 变量、方法:第一个单词首字母小写,其它单词首字母全部大写。例:myDateConverter
c) 常量:全部字母全部大写,单词之间使用’_’隔开。例,DEFAULT_PAGE_SIZE
2, 使用有意义名称,慎用缩写。
3, 注释:在代码中加入合适注释:说明步骤,和说明非简单逻辑。
4, 空行:在代码中加入合适空行,就像写文章时要分段一样(增强可读性)。
5, 要格式化代码、一个java文件中代码不要过多、一个方法中代码不要过多。
总而言之,要确保代码有效、清楚、简练(à可读)。
1, 有效:这是第一目标,代码要是能够处理问题。
2, 清楚:在有效前提下,让代码结构和思绪清楚。
3, 简练:代码和逻辑应尽可能简单,不要是给她人讲她人全部听不明白。
1.3.5. 约定
1, 工程中全部文件全部采取utf-8编码。全部页面全部是使用utf-8编码,这么方便处理表单内容乱码问题。乱码通常情况下是乱用编码产生。
2, 实体主键属性类型使用Long型。
1.3.6. 项目计划
功效
知识点
估计时间
1. 搭建环境 + 基础功效
a) Dao设计
1. Struts基础
2. Hibernate基础
1天
2. 组织用户管理
a) 岗位管理
b) 部门管理
c) 用户管理
1. 通常实体设计
2. 实体映射(映射文件)
3. 增删改查功效
4. 树状显示
5. 使用jQuery.validate进行表单验证
2天
3. 系统权限
a) 创建权限
b) 分配权限
c) 使用权限
1. jQuery通常使用
2. 权限控制方案
2天
4. 论坛
a) 论坛管理
b) 论坛基础功效
c) 文章管理
1. 分页
2. 在线编辑器FCKeditor
3天
5. jBPM + 审批流转
a) 工作流框架jBPM
b) 审批流转功效
1. 工作流框架jBPM
2. 工作流通常应用
4天
2. 准备环境
2.1. 创建数据库,要注意编码
1,使用MySql数据库。
2,创建数据库时,要注意编码要支持汉字。
3,建表语句以下:
create database itcastoa default character set utf8;
show create database itcastoa;
说明:需要先运行Mysql配置向导,把编码配为GBK或UTF8。假如配成UTF8,在mysql命令行用户端中就有乱码,所以最好用GBK。
2.2. 新建Web工程并进行配置
2.2.1. 配置工具
2.2.1.1. 配置快捷键
1, 把Content Assist设为Alt+/
2, 把Word Completion 设为Alt+.
3,其它常见快捷键说明:
Alt+/
Content Assist 代码提醒
Ctrl+T
显示类继承结构
Ctrl+O
列出类中组员(组员变量、方法等)
Ctrl+/
注释/取消注释
Ctrl+Shift+O
导入要使用包、并去除不使用包
Ctrl+Shift+F
格式化目前文件中代码/格式化选中代码
Ctrl+Alt+Up
复制目前行到下面
Ctrl+Alt+Down
复制目前行到上面
Ctrl+D
删除目前行/删除选汉字本占全部行
Shift+Enter
相当于按End后再按Enter
Alt+Left
Alt+Right
Ctrl+Shift+X
变为大写
Ctrl+Shift+Y
变为小写
2.2.1.2. 配置文件默认编码
1, 设置工程默认编码为UTF-8。
2, 配置JSP默认编码为utf-8
2.2.1.3. 配置格式化代码样式
1, 使用Ctrl+Shift+F能够格式化代码。
2, 在WindowàPreferencesàJavaàCode StyleàFormatter中能够设置代码样式。 要把Java代码和注释行宽设为130。(其它使用默认样式)
3, 搜索XML Sources,修改xml行宽为130。(不考虑打印情况)
2.2.1.4. MyEclipse工具使用说明
1, 导入工程时能够直接选择一个zip文档:FileàImportàExisting Projects into Workspace-->Select archive file。
2, 工程更名后,发果公布到Tomcat下,对应应用名称不一定改变。这个名称是在MyEclipseà Web中Web Context-root中配置。
新建一个Web Project,并设置工程编码为UTF-8。
2.2.2. 添加框架环境
说明:
1, 不要引用外面Jar包,应全部拷贝到工程中。
2.2.3. 配置数据库
修改Hibernate.cfg.xml中数据库连接信息。并在hibernate.cfg.xml中做以下配置:
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- 自动更新表结构 -->
<property name="hbm2ddl.auto">update</property>
2.3. 工程中资源分类(目录和包结构)
2.3.1. 目录结构
源码文件夹
src 项目源代码
conf 配置文件
test 单元测试
WebRoot文件夹下
script JavaScript脚本文件
style CSS样式文件
WEB-INF/jsp jsp页面文件(再创建子文件夹分类存放)
2.3.2. 包结构
使用三层:显示层(View),业务层(Service),数据访问层(Dao)
(部分)
包名
说明
cn.itcast.oa.domain
实体(Domain)
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.struts2.action
StrutsAction
cn.itcast.oa.util
部分工具类
cn.itcast.oa.cfg
cn.itcast.oa.filter
View 显示 Jsp + JSTL + Struts + jQuery
Service 业务逻辑 JBPM
Dao 数据访问 Hibernate
3. 基础功效
3.1. 设计BaseDao接口和BaseDaoImpl类
每个实体全部应有一个对应Dao,她封装了对这个实体数据库操作。例
实体 Dao接口 实现类
========================================================
User --> UserDao --> UserDaoImpl
Role --> RoleDao --> RoleDaoImpl
Department --> DepartmentDao --> DepartmentDaoImpl
Article --> ArticleDao --> ArticleDaoImpl
...
说明:
4, 实体Dao接口要继承BaseDao接口。
5, Dao实现类要继承DaoImplBase类。
6, 也能够不继承指定接口或类,这么就要自己写对应方法。
7, T getById(Long id)和List<T> getByIdList(Long[] idList)不要合并为List getById(Long... ids),因为获取一个对象时也是返回List,不方便。
获取 BaseDao类型参数TClass
问题:
1, 有了DaoBase和DaoImplBase,还要用UserDao、RoleDao吗?
答:要用。因为UserDao或RoleDao中方法能够分为有公有方法和特有方法两部分。公有方法是经过继承BaseDao得到,特有方法要写在自己里面(BaseDao中是没有)。
2, UserDaoImpl已经继承了BaseDaoImpl,就不实现UserDao能够吗?
答:不能够。不然UserDao userDao = new UserDaoImpl(); 就不成立。
使用反射获取类型参数真实类型代码以下:
public DaoBaseImpl () {
Type type = this.getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) type;
this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
}
说明:
1, 使用Session时,不要自己创建,也不要管理事务,直接调用getSession()即可。
2, 临时不实现getSession()方法,在后面事务管理中实现:
protected Session getSession(){
throw new UnsupportedOperationException();
}
展开阅读全文