1、工程架构
层次设计大致分为:Remote层、Manager层、Service层、Cache层、DAO层、DTO\DO。
各层次功能描述:
- Remote层:对外暴露dubbo接口;
- Manager层:多表业务;
- Service层:单表业务;
- Cache层:缓存业务;
- DAO层:数据库访问操作;
- DTO:暴露服务操作对象;
- DO:数据库操作对象;
2、开发规范
- Remote层:只允许操作Manager层和Service层,命名规范为Remote*Service;
- Manager层:只允许Service 层,可以使用缓存和事务;
- Service层:只允许DAO 层和Cache层,一个Service对应一个DAO;
- Cache层:只允许DAO 层,封装有降级策略的业务;
3、注意事项:
对外暴露的服务(Remote层),不允许抛出异常(异常需要发送堆栈信息),减小网络开销;
消费者获取DubboResult后,必须先判断调用是否成功,成功则进行正常业务处理,失败应该抛出异常或其他处理;
服务端在RemoteService层应该始终返回DubboResult;
内部Service层的业务异常应该使用BusinessException封装,而不应该使用RuntimeException;
Dubbo层应该配置加入RuntimeExceptionFilter,该filter会自动拦截所有的RuntimeException并返回失败的DubboResult;
若无受检异常:return DubboResult.successResult(Object);
否则:try{
return DubboResult.successResult(Object);
}catch(BusinessException e){
return DubboResult.failResult(e.getMessage());
}
注:受检异常指除了RuntimeException及其子类之外的其他异常。
Dubbo返回结果必须是DTO对象,DTO必须实现Serializable接口,并包含serialVersionUID;
本文介绍了Dubbo服务的工程架构,包括Remote层、Manager层、Service层、Cache层、DAO层、DTO和DO的职责。开发规范强调了各层间的交互规则,如Remote层仅操作Manager和服务层,Manager层允许使用缓存和事务等。同时,提出了对外服务不应抛出异常、消费者需检查调用结果、服务端始终返回DubboResult等注意事项。建议内部业务异常使用BusinessException,且Dubbo层应配置RuntimeExceptionFilter。
3万+

被折叠的 条评论
为什么被折叠?



