没有合适的资源?快使用搜索试试~ 我知道了~
首页泛微E9后台开发指南.pdf
泛微E9后台开发指南.pdf
需积分: 46 3.4k 浏览量
更新于2023-05-27
评论 4
收藏 763KB PDF 举报
泛微E9后台开发指南。E9新架构与现行的架构能够很好的结合,前后端分离的同时,对后端增加了分层、AOP、IOC、interceptor的支持。
资源详情
资源评论
资源推荐

概述
架构图
目录结构
标准开发指南
开发说明
1、建立Action类
2、建立Service类
3、Service对象实例化方式
4、建立Command类
5、规范
异常处理
日志处理
无侵入开发指南
类级别(Command)动态代理
方法级(Service-Method)动态代理
概述
新架构与现行的架构能够很好的结合,前后端分离的同时,对后端增加了分层、AOP、IOC、interceptor的支持。
新架构要求service和Command层必须面向接口编程, 同时通过IOC和命令委托方式进行各层的解耦(具体参加下
方示例);
另外,新架构还提供全局interceptor和局部interceptor、SERVICE-AOP、COMMAND-AOP的支持,可以进行比如
日志记录、声明性事务、安全性,和缓存等等功能的实现和无侵入二开。
新架构采用命令模式和职责链模式作为基础开发模式,提供一系列的公共实现,用于规范开发过程。
架构图

目录 说明
command 公共模块
core 核心框架
workflow 流程模块
hrm 人力资源模块
email 邮件模块
... 其他
目录说明:
注意:每一个模块在该目录下都应该有一个对应的目录
内部文件结构
目录说明:

目录 说明
biz 模块内公共业务类目录
constant 常量类目录
cmd 业务Command类目录
entity 实体类目录
service 业务Service服务类目录
util 工具类目录
web Action类目录
标准开发指南
开发说明
1、建立Action类
Action类需要在web目录下建立,web目录位于模块文件夹下; 每一个功能都应有一个与之对应的Action类,用于
对外提供接口服务,Action中不建议包含业务逻辑的处理,业务逻辑请放到Command层(见后文)。 Action类作
为边界类,对外提供接口服务, 对内做业务调用,并负责将内部返回的数据做JSON格式的转换,返回给接口的调
用者,这里需要注意的是:数据格式的转换尽量的放到Action中, 不要放到业务层(Service、Command层),
这样做的好处是有利于维护和二开。
示例 1 建立action类, 并配置方法的Path,以及返回数据的类型(注意:类并没有配置Path)
package com.engine.workflow.web.workflowPath;
/**
* 标题设置action
* */
public class TitleSetListAction {
private TitleSetService getService(){
//实例化Service类
return ServiceUtil.getService(TitleSetServiceImpl.class);
}
/**
* 标题设置
* */
@GET
@Path("/getCondition")
@Produces(MediaType.TEXT_PLAIN)
public String getCondition(@Context HttpServletRequest request,@Context HttpServletResponse
response){

com.engine目录是核心业务逻辑类所在目录,不允许直接暴露对外服务接口,对外服务接口请暴露在com.api下
(专门提供API服务的目录)。 具体操作是(见示例 1 和 2): 在com.api.模块.web目录下建立对外接口类,然后
通过extends(继承)的方式暴露RESTful服务接口。 示例 1中的Action建立后还不能被前端调用,因为类没有暴露
出来,还差一步,见示例 2
示例 2 在api目录下暴露接口,直接extens之前写好的action
2、建立Service类
Service类需要在service目录下建立,service目录位于模块文件夹下;
每一个功能都应有一个与之对应的Service接口和impl实现类, 注意:Service中不允许有具体的业务实现,仅作为
服务的提供者,具体业务委托给具体的Command。
Service接口不需要继承任何类,但需要将其中的服务接口描述清楚
Service接口示例
Map<String,Object> apidatas = new HashMap<String,Object>();
try{
User user = HrmUserVarify.getUser(request, response);
//实例化Service 并调用业务类处理
apidatas = getService().getTitleSetCondition(ParamUtil.request2Map(request), user);
}catch(Exception e){
//异常处理
e.printStackTrace();
apidatas.put("api_status", false);
apidatas.put("api_errormsg", "catch exception : " + e.getMessage());
}
//数据转换
return JSONObject.toJSONString(apidatas);
}
}
package com.api.workflow.web.workflowPath;
import javax.ws.rs.Path;
/**
* 标题设置action
* */
@Path("/workflow/nodeSet/titleSet")
public class TitleSetAction extends TitleSetListAction{
}
/**
* 后台流程监控service
* @author luosy 2017/12/20
剩余24页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0