系统:本系统是属于b/5架构面设计开发的是某个物流公司的一个后台管理系统,属于物流公司整个erp平台的一个组成部分。本系统是此物流公司的一个二期改造项目,原来
此公司存在一个c/5架构的系统,后来业务不断扩大,所以公司决定进行改造,该系统主要有基础设计,取景,中专,路曲,控表及大部分组成。
项目周期:整个项目周期大概是1年的时间,其中编码段大概要4个月,团队人数20多个人。
技术架构:
本系统采用ssh框构开发,web层使用struts2,持久层采用hibernate5,spring管理web层的actien,业务层的sevice,持久层的dao。前台使用jqueryeasyuiy。
spring的作用:
spring管理actien,sevice,dao,action采用多列的管理方式。对sevice和dao采用单列方式。
本系统采用声明式事物控制方式对sevice进行事务控制。spring和hibernate整合后,spring在sevice方法开发执行前创建session,开启事务,方法结束提交事务,关闭
sevice。
spring和shiro进行整合开发,spring管理shiro框架的secuntyManager,reaim等bean,另外spring通过cjlib方式生成action的代理对象,实现权限控制。
spring和cxf框架整合调用开发。
hibernate的使用:
本系统使用hibernate的qbc和hql两种开发方式。
本系统对dao层进行封装,采用泛型basedao,在spring定义bean的配置中通过basedao的构造方法动态或的操作实体类型,这样做的好处是需要在系统定义一个basedao即可,根据模型的不同在spring的配置文件定义不同的·dao。
如果在开发中遇到延迟问题,可以通过sppring的opensessioninviewfilter过滤器解决这个问题,如果还不够,这时就需要使用立即加载策略。
struts怎样用?
本系统采用摸型驱动方式编写action,视图层采用jsp。
开发中封装baseAction,采用泛型由子类指定具体的模型对象类型。
struts中的所有action对象都交由spning创建。
这个系统ui使用jqueryeasyui,及jqwery裤。
布局使用layout,标签窗口采用tabs,菜单使用accordin,数据列表采用datagrid,
弹出窗口window
消息提示:messager
菜单:menubotton
下拉框:combcbo
使用ApacheShiro框架完成认证和授权,shiro框架中的对象创建由spring负责创建,
shiro框架共提供了4中权限控制方式,本系统中使用到前3种方式:
1、URL拦截权限控制,通过shiro框架提供的过滤器实现
2、方法注解权限控制,通过为Action创建代理对象实现
3、页面标签权限控制,通过shiro框架提供的标签实现
4、代码级别权限控制,通过在程序中调用shiro的API完成权限控制
如何使用shiro:
1、自定义了realm,从数据库查询用户密码和用户的权限信息,为了避免多次查询realm使用ehcache缓存。
2、使用shiro主要是要在shiroFilter中配置过虑规则,哪些可以匿名访问,哪些必须要认证。
使用ApachePOI组件完成导入和导出Excel
jxl也可以Excel
做接口:
采用CXF框架实现远程调用,由于接口同步数量不大,hessian采用框架定义的二进行协议传送数据,速度很快,本系统采用CXF.
在开发时将服务端的接口拷贝至本系统,在sprig的配置文件中配置代理接口,在本系统的service中直接注入调用。
对于大数据传输我们可以直接使用socket的方式传输。
对于一些公开的接口(不同公司的系统之间的调用),大多采用http的方式定义接口,对于服务端现在流行使用rest方式,对于客户端我们一般使用httpclient调用服务端。
还有一些接口采用webservice(soap协议),这个我们使用过cxf这个框架开发。
axis
hessian
dubbo
这个项目还可能遇见这些问题?
系统维护的流程:
如果系统问题严重的话需要立即解决:1讨论出修改方式;2开发人员进行修改;3修改完成提交测试人员4测试完成使用升级包升级系统。
如果系统问题不严重可以下个版本解决。
遇到的问题很多,有技术方面的,也有非技术方面的:
1、开发工程师的技术水平参差不齐,有些技术稍差的工程师经常不能按时完成项目经理分配的任务,还需要其他人帮忙,导致项目进度缓慢
2、和测试人员沟通困难,有些时候测试人员会提交一些bug,但在我们开发看来根本就不是bug
3、人员不稳定,如果有人离职,新招进来的人不能立即上手,导致项目推进缓慢
如何和测试人员配合工作的?
每天定时登录项目管理平台,查看有没有自己名下bug,如果有根据测试人员描述的测试场景进行测试,如果存在bug会及时修改,修改完成将bug提交。如果根据测试人员描述的测试场景进行测试,bug不存在,和测试人员沟通。
如果遇到bug来回驳回,我去现场和测试人员进行沟通,针对测试场景看看双方是否一致。