码迷,mamicode.com
首页 > 其他好文 > 详细

GoFramework框架开发规范

时间:2018-05-28 11:28:52      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:service   nal   过程   问题   catch   分享   inf   facade   用户信息   

服务层规范

java文件分类
枚举:目前枚举多由工具生成,如果需要进行数据库操作,则需要实现org.go.api.core.enums.BaseEnum接口。
dto:目前同时做为请求及响应参数,与数据模型关联密切
request:对应渠道侧的页面级请求,当dto模型不能满足页面请求时,需要新增request类型
response:对应接口的最终返回结果,该类型代表接口的最终结果,一般不能做为集合中的元素返回。
item:对应集合中的元素,当dto模型不能直接做元素使用时,可以使用通过定义item类型来解决
facade:分为直接操作数据库的简单服务,以及进行服务组合或复杂运算的高级服务。高级服务需要在名称中增加Prof关键字来区分。
bo:对应数据库表或视图的实体,在mybatis中做为请求或响应参数来使用。目前要求除非数据返回的是基础类型如Integer,Long,String等,则必须使用bo类来承载返回结果。
dao:定义mybatis接口及xml文件
facade实现类:含义如同其名。

错误码:
1、错误码存放在ResCode类中,由一位字母加四位数字组成,系统的不同模块错误码可以定义不同的错误码前缀。
2、接口全局错误码,针对错误码配置太繁琐的问题,将一个接口定义成一个错误码,并结合1.0.1的注解进行使用,暂定类名称为R。如下:

public class R {

    public static final String gridInfoProfFacade = "R0101";// 网格点高级服务
    public static final String unitInfoProfFacade = "R0102";// 单位高级服务
    public static final String generatePdfFacade = "R0103";// 单位高级服务
    public static final String unitDeviceProfFacade = "R0104";// 单位设备高级服务
    ....
}

3、要求每个接口都需要指定错误码及信息(可以共用)。为了避免抛出未知异常,接口中必须要做异常处理。如下:

   @Override
    public List<FormElement> getFormElementList(FormElementListGetRequest request) throws PendingException {
        try {
            // 对请求参数进行校验
            AbstractBaseRequestDto.validateThrow(request);
            // 查询缓存用户信息
            User user = userCache.get(request.getUserId());
            // 查询表单元素列表
            ....
            return formElementList;
        } catch (Exception ex) {
            // 对异常进行处理
            throw transferException(ex, ResCode.formElementListGetFailed);
        }
    }
        

如果使用1.0.1框架及以上,也可以使用注解方式,减少代码量

    @Override
    @RpcMethod("部门下的文书及风险项选项列表查询")
    public List<FormElementOptionItem> queryDeptDocRiskOptionList(DepartmentIdRequest request) throws PendingException {
        // 对请求参数进行校验
        validateThrow(request);
        // 从缓存中进行查询
        return deptDocRiskOptionCache.get(request.getDepartmentId());
    }

上述前提需要给接口所在服务类配置全局错误码,如下

@Service(version = "1.0.0")
@RpcClass(R.departmentInfoProfFacade)
public class DepartmentInfoProfFacadeImpl extends AbstractDubboIntegrationService implements DepartmentInfoProfFacade {
    ....
}

数据库自定义查询开发流程
结构组成:
request类:数据库查询时所需要的请求参数类。但如果请求参数只有一个基础类型,或者能找到合适的dto模型,则可以省掉本类。
bo类:数据库查询结果的映射类型,如果返回结果是基础类型,则可以省略。
dto类:最终接口返回的数据模型,与bo类对应。
dao接口及xml:mybatis的必要组件
facade及实现类:看情况决定使用现有类型还是新增

开发过程:
(1)编写request类。可使用Dto工具生成校验部分的代表,如下图:

技术分享图片

(2)编写bo类,与数据库查询返回结果对应。
(3)利用bo类生成dto类及mybatis map的代码片断。如下图:

技术分享图片

(4)在dao的xml文件中写查询块。请求参数直接使用request类,响应参数使用bo类的Map。
(5)使用工具生成dao接口、facade及实现类的方法内容。如下图:

技术分享图片

GoFramework框架开发规范

标签:service   nal   过程   问题   catch   分享   inf   facade   用户信息   

原文地址:https://www.cnblogs.com/wuyuhuanzhen/p/9098600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!