工程规范
这几天在写一个内部的小需求,需求很简单。但是在搭建工程的时候遇到了不少问题,本来一天半能搞定所有的东西上线,但是不符合公司上线的规范要求重构。特此记录一下
项目结构
大部分项目应该使用CRUD模式,只有在绝对必要的时候使用更为负载CQRS模式。
Java服务的结构如下(假设项目名为demo):
- demo-api: HTTP 服务入口 (包括dubbo服务,controller等)
- demo-common: 公用代码 (包括enmus,exception,utils等等)
- demo-contract: RPC服务接口(原生java不应该依赖任何东西,比如rpc服务接口,自定义的HttpRequest实体类等)
- demo-core: command操作/应该仅用于CQPS模式
- demo-domain: 领域对象
- demo-integration: 外部HTTP接口访问层
- demo-logic: 业务逻辑层/用于CRUD模式
- demo-manager: 通用业务逻辑层(新增)
- demo-mq: 消息队列接入层
- demo-repository: 数据库访问层/DAO层
- demo-query: 在线业务逻辑层/应该仅用于CQRS 模式
- demo-service: RPC 服务入口
- demo-task: 离线任务
- demo-tool: 工具
- docs: 文档
- 其他: 项目特有的其他目录
应用分层
以CRUD模式为例子
- Open API层:可直接封装 Service 接口暴露成 RPC 接口 ; 通过 Web 封装成 http 接口 ; 网关控制层等。
- API层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
- Service层: RPC接口层
- Logic层:相对具体的业务逻辑服务层。
- Manager层:通用业务处理层,它有如下特征:
- 对第三方平台封装的层,预处理返回结果及转化异常信息 ;
- 对 Logic 层通用能力的下沉,如缓存方案、中间件通用处理 ;
- 与 DAO 层交互,对 DAO 的业务通用能力的封装。
- DO(Data Object): 与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
- DTO(Data Transfer Object): 数据传输对象, Logic 和 Manager 向外传输的对象。
- BO(Business Object): 业务对象。可以由 Logic 层输出的封装业务逻辑的对象。
- QUERY: 数据查询对象,各层接收上层的查询请求。注:超过 2 个参数的查询封装,禁止使用 Map 类来传输。
- VO(View Object): 显示层对象,通常是 Web 向前端渲染传输的对象。
转载于:https://www.cnblogs.com/WegYcx/p/8033415.html
总结
- 上一篇: @responseBody 返回更多数据
- 下一篇: java学习之单例模式(饿汉式与懒汉式)