宅急送项目开发过程及问题?
一、 需求和文档
1、 项目类型
OA : 办公自动化(Office Automation,简称OA)是将现代化办公和计算机网络功能结合起来的一种新型的办公方式
CRM : CRM(Customer Relationship Management)即客户关系管理 通常所指的CRM,是指用计算机自动化分析销售、市场营销、客户服务以及应用支持等流程的软件系统
ERP : ERP是Enterprise Resource Planning(企业资源计划)的简称, ERP是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件
CMS :网站内容管理系统, 即 Content Management System ,英文缩写是CMS。 网站内容管理系统具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。
宅急送物理系统 是ERP子系统
2、 项目相关介绍
研发时间2010 二期工程 ,采用CS架构
针对二期系统需求,使用 B/S 制作
规模: 20多个工程师 ,不到3个月时间 (企业通常"人月" 概念计算项目规模 ----- 60人月) ------- 300-400万项目
3、 项目文档:
项目经验: 项目需求、如何实现
文档: 宅急送新业务系统流程说明书-整合版.doc
软件开发流程 : 宅急送公司公开招标(金蝶、用友 ) ----- 中标后成立项目组 (项目经理、需求分析工程师、开发人员 页面设计工程师、美工、Java工程师、测试工程师) ------- 需求人员整理整理需求
** 文档: 宅急送新BOS系统软件需求规格说明书.doc ----- (作业: 阅读引言 系统管理之前部分 )
Java工程师,接触到最高文档 通常需求文档 ------------- 系统原型 (假数据页面) 、 详细设计 、 开发编码
4、 功能分为三大模块: 公共信息模块 、 取派(业务受理、货物调度、返货)、中转业务(货物进出库 )、 路由管理 (运输工具,进出港)
====================================================================================
二、 技术选型
初级工程师,刚入职 系统后期维护升级 (基于原有系统的功能追加 )
小公司项目经理 ===== 项目经理 + 技术经理 + 架构师
大公司
项目经理 : 管理项目 (人力、财务、项目进度、和客户沟通 偏销售) ---- 零技术 (团队管理)
架构师: 技术选型、难题攻关 , 保证技术方案在项目组可实施 (技术管理 )
技术经理 (组长): 带手下人干活的 ,确保手下的人任务能够完成
技术选型 :
项目三层结构: web层解决方案、业务层解决方案、数据层解决方案
任何公司: 长期开发,积累自定义组件
流程技术: struts2 + spring3 + hibernate3
运行平台: 版本管理 SVN + Linux (服务器环境部署 ) + tomcat7.0 + JDK7 + Oracle
开发环境: window + tomcat7.0 + JDK7 + mysql
UI设计 : jquery easy ui
服务器端 : 任务调度(定时器) quartz 、 表单HTML在线编辑器(所见即所得)、报表 Open Flash Chart 、 JBPM 、 excel解析 POI
三、技术预热阶段
1、 struts2 + spring3 + hibernate
便捷性 : 首选注解开发
熟练度 : 配置文件
struts2 框架使用 blank.war中所有jar包、 struts2-spring-plugin.jar 、 (使用注解 struts2-convetion-plugin.jar)
*** 非注解 web.xml struts.xml
*** 注解 web.xml @Action
在实际开发中为了位置文件 更好维护, 创建单独source folder ----------- config
在实际开发中经常需要单体测试 ,需要将测试代码 与功能代码分开,也可以采用创建 单独source forlder ------------- test
spring3 框架使用 core、aop、tx、jdbc、dao、test 、web 、log
** 在config下 导入log4j.properties
** 在config下 创建applicationContext.xml jdbc.properties
** Hibernate 实体类都是用注解 开发
配置数据源 、Hibernate实体类 通过packageToScan 自动扫描、 事务管理器TransactionManager、 使用注解管理事务
配置 web.xml ContextLoaderListener
Hibernate框架使用 hibernate3.jar 、required/*.jar、 jpa.jar 、log4j 、 二级缓存
*** 将Hibernate 配置写入Spring中 applicationContext
问题: struts2是直接与客户端交互,需要编写jsp文件,如何对jsp做权限控制 ?
* 方案一 : 如果jsp在WebRoot下,url直接访问到,通过Filter 进行权限控制
* 方案二 : 将jsp 放入WEB-INF下 ,页面url不能直接访问 ,通过struts2 的Action转发给 jsp (因为经过Action,通过拦截器进行权限控制)
使用方案二,该Action没有什么逻辑,只是单纯跳转 ------- 默认处理类
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
<action name="page_*">
<result>/WEB-INF/pages/{1}.jsp</result>
</action>
问题: 客户端使用Ajax访问struts2 , struts2如何返回一个json数据
* 方案一: json-lib
* 方案二: flexjson
AJAX过程中,请使用火狐查看通信过程中数据,调试js ---- firebug 经常使用console.info(信息); (类似System.out )
json-lib
**** TODO : json-lib 序列化日期对象出现异常
如果两个对象互相关联,在序列化过程中 , net.sf.json.JSONException: There is a cycle in the hierarchy! ---- 解决 JsonConfig 设置某个属性不进行序列化
flexjson
导入 flexjson.jar
JSONSerializer jsonSerializer = new JSONSerializer();
String result = jsonSerializer.serialize(customers); ------ 默认只会序列化当前对象,关联Order没有被序列化
String result = jsonSerializer.deepSerialize(customers); ----- 深度序列化,将关联对象序列化
jsonSerializer.exclude("*.class"); // 不对getClass属性进行序列化
** 没有日期问题
问题: 业务层进行事务管理 ?
使用Hibernate, 将sessionFactory对象注入 HibernateTransactionManager , 有该对象进行事务控制
<tx:annotation-driven transaction-manager="transactionManager"/> 使用注解来管理事务 ------- 在需要管理事务类或者方法上 @Transactional
***** 进行事务管理 通常Service层
事务管理 @Transactional 属性 isolation 隔离级别 propagation 传播行为 read-only 设置事务只读 timeout 设置事务超时
问题: 通常锁编写代码会针对业务层进行测试
@RunWith(SpringJunit4LoaderRunner.class)
@ContextConfiguration("location: classpath:applicationContext.xml")
public XxxServiceTest {
@Autowired
private XxxService xxxService;
@Test
public void testRegist(){
}
}
问题: 架构系统时,是否使用接口 ?
在业务层、数据层都会定义接口 , 统一规范 ,分层开发
* 许多外包公司,按层划分任务
* 开发过程中 ,Action依赖Service、Service依赖DAO ,使用接口进行分层开发 , 例如:web层只需要调用接口编程, 业务层只需要考虑接口实现
* 便于维护
问题: 数据层 ,将使用 HibernateTemplate 进行操作 。 模板提供的很多方法都使用泛型
例如:
将一个数据对象,保存到数据库 this.getHibernateTemplate().save(Object); ------ 可以用来对各种数据类型进行保存
修改 update()
删除 delete
查询 get/load 根据id查询,查询所有 find , 条件查询 findByCriteria
将重复操作,抽取一个公共类 GenericDAO<T> extends HibernateDaoSupport
***** 接口和抽象类的区别 ???
// 增加
public void save(T obj);
// 删除
public void delete(T obj);
// 修改
public void update(T obj);
// 查询
public T findById(Class<T> domainClass ,Serializable id); // 如果id自增,定义为Integer 或者 Long
public List<T> findAll(); // 查询所有
public List<T> findByCriteria(DetachedCriteria criteria);// 各种各样条件查询, 添加排序
public List<T> findByCriteria(DetachedCriteria criteria, int firstResult , int maxResults); // 分页查询
public List<T> findByNamedQuery(String namedQuery); // 进行条件查询,使用hql, 在业务层调用NamedQuery名称就可以了
使用注解配置Customer和Order
@Table(name="orders")
public class Order {
@Id
@GenericGenerator(name="uuidGenerator", strategy="uuid")
@GeneratedValue(generator = "uuidGenerator")
private String id ;
private String addr;
@ManyToOne(targetEntity=Customer.class)
@JoinColumn(name="customer_id")
private Customer customer ;
@Entity
@Table(name="cutomers")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id ;
private String name;
// mappedBy 相当于 inverse,将外键权利交给对方
@OneToMany(targetEntity=Order.class,mappedBy="customer")
private Set<Order> orders = new HashSet<Order>();
====================================================================================
四、bos项目构建
分为三个资源包: src 源码、 config配置文件 、test测试用例
整合: 将action配置到struts.xml 、 applicationContext.xml 主要配置业务层和数据层 、数据源、 事务管理 ------ 将applicationContext.xml 分为service 、dao
编写代码时:将struts的action配置struts.xml , 将service配置到service.xml 将dao 配置到dao.xml
action、service、dao 都是使用xml配置, 实体类domain使用注解(省略hbm文件)
* 允许注入时,使用Autowired注解 (使用Autowired 需要 <context:annotation-config /> )
客户端前台页面 ------------------------- 使用jquery easyui 前端框架
为什么要使用easyui ? 很多团队,工程师主要是服务器端工程师,不熟悉页面开发 ------- CSS很差
** 很多前端UI框架,自带CSS模板,即使java工程师也可以写出非常漂亮的界面
为什么不用ExtJS? 要用EasyUI ?
因为ExtJS框架比较庞大,引入后,系统性能有问题,比较慢, EasyUI 轻量级js前端框架
你知道EasyUI 收费吗?
1.2.2 版本之前,使用 GPLv3 协议 , ,开源组织协议 ----- 免费
1.2.3 之后 GPL License Commercial License
使用版本1.3.2 --------- 去下载该版本easyui (是一套基于Jquery的前端UI框架,作用在于快速构建前端界面)
需要导入到工程的文件:
1、 locale 国际化信息文件
2、 plugin 所有插件 js文件
3、 theme 主题CSS
4、 jquery-1.8.0.min.js jquery核心包
5、 jquery.easyui.min.js 所有插件的合集 ====== plugins 里所有js
6、 easyloader.js 可以根据代码选择plugin中的插件
easyloader.js + plugin === jquery.easyui.min.js
学习曲线: 布局layout
<script type="text/javascript"
src="${pageContext.request.contextPath }/js/jquery-1.8.0.min.js"></script> ------------ jquery核心js
<script type="text/javascript"
src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script> -------- easyui核心js
<script type="text/javascript"
src="${pageContext.request.contextPath }/js/easyui/locale/easyui-lang-zh_CN.js"></script> ----- 国际化信息
<link id="easyuiTheme" rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css"> ------ easyui核心css
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath }/js/easyui/themes/icon.css"> -------- 图标css
第一种 页面代码使用HTML编写,用easyui渲染,第二种 使用js 生成页面html
布局layout分为 东西南北中 ----- 中是必须的 ,东西南北都可以省略 。
宅急送项目开发过程及问题?相关推荐
- 项目开发过程中的收获与思考
2013年7月,我正式毕业了,到公司入职,也就正式成为了一名菜鸟程序员.到今天,2014年1月3日,目前主要的工作是公司一个项目中的一个功能模块,到我进入项目组算起,已经过了四个月了.因此,想写点东西 ...
- iOS项目开发过程中的目录结构(转)
iOS项目开发过程中的目录结构 我在这个目录结构方面真是吃了不少苦,开始总是觉得快点写快点写,后来发现只有快是不行的,在没有给整个项目的结构有一个清楚的认识和了解之前就匆匆动笔(敲代码啦)是非常冒失的 ...
- 软件项目开发过程中主要遇到的核心问题小结
最近在北京组织管理某银行的现金管理系统项目的开发,对软件项目开发过程中遇到的问题进行一些心得体会小结,怕时间长了没及时写下来时间久了被遗忘了,现在趁项目还在开发过程,把体会相对深刻时,感受到的一些问题 ...
- xml模块、项目开发过程
一.XML模块 xml指的是可扩展标记语言,是一种定义电子文档结构和描述的语言,可以用来标记数据.定义数据类型. 什么时候用xml? 当需要自定义文档结构时,使用xml.在java中经常会使用xml来 ...
- 浅谈软件项目开发过程中的主要项目风险及对策
软件项目成果的需求分析方和软件项目的承担者都十分关心这样的一个问题:什么样的因素会导致软件项目的失败?与项目有关的因素的改变将对按时.按经费预算交付符合预定质量要求的软件成果产生什么样的影响?这些都属 ...
- [转]普通软件项目开发过程规范(五)—— 总结
[引言]优秀的程序员既懒又笨. 因为懒,做为优秀程序员一族,就没有必要经常创建无意义的新玩意,我们需要一套切实可行的过程规范,能达到开发目的就好了,除非是,能创造出让我们可以更变得懒的玩意. 笨,有规 ...
- 宅急送项目第六天笔记!
宅急送项目第六天 一. 回顾前5天 1. 项目前端 easyui (为什么使用? 收费? ) .服务器SSH三大框架 2. 数据层 GenericDAO 抽取 3. 业务层 分页查询 制作为通 ...
- 宅急送项目的第七天笔记!(JBPM工作流)
宅急送项目的第七天 三个主要功能模块: 基础设置. 取派业务.中转配送业务 基础设置: 标准管理.取派员管理.区域设置.分区设置.定区管理 取派业务: 业务受理.工作单快速录入(追单.销单). 工作 ...
- 宅急送项目的第七天笔记!(JBPM工作流和介绍 -- 权限管理模型)
一.回顾第一天核心内容 1. JBPM是什么? 为我的项目带来什么? 工作流, 就是将业务流程实现自动化,非人工方式,控制任务的执行 -------- 所有业务流程 执行信息 都可以存放到数据库 ...
最新文章
- sed编辑器: 非交互
- 【uni-app】动态计算图片高度
- Android Kotlin之kotlin-android-extensions使用
- Java的四种包访问权限
- json oracle 导入,JsonToOracle-Json导入Oracle工具下载 v2.0 官方版 - 安下载
- Silverlight+WCF 新手实例 象棋 介绍II(九)
- kmp 学习【字符串-kmp学习】
- Charles抓包工具实战教程(完结)
- 机器学习视频课程(超清完整11周)分享给大家!
- 如何防范动态调试(Anti-Debug)(SoftICE篇)
- ASP.NET删除服务器端文件,asp.net删除服务器上的文件
- 计算机主机usb端口使用不了,电脑usb接口不能用怎么办
- 全线支持国产化:360杀毒软件与国产操作系统UOS完成适配
- 家谱树c语言程序,Javascript库 - 家谱树流程图
- 动物识别 羊群识别 牛识别 马识别 yolo动物识别 鸟类识别 狗识别 猫狗分类
- 计算机专业专硕考研学校排名,计算机考研学校排名
- Python--PyQt5
- 偶感 - 写在细雨朦胧的早晨
- 玩转Java8Stream之函数式接口
- android横向进度条宽度,Android - 条纹进度条实现,调整view宽度仿进度条
热门文章
- Ubuntu18 安装98五笔
- IDEA 中 使用 MyBatis 访问数据库时 报错 Table ‘xxx.t_xxx‘ doesn‘t exist
- SEM/百度竞价账户每天主要看哪几个数据,怎么去做出稳定的好账户?
- uni-app运行微信小程序时文件查找失败的问题
- 企业AAA信用等级认证好处
- 前端 用nginx解决js跨域问题
- IDEA安装Vim插件并配置共享VIM和Windows的剪切板
- 02 java语言基础
- 惩罚函数内点法c语言,分享:惩罚函数法(内点法、外点法)求解约束优化问题最优值...
- rf2o_laser_odometry常见问题