Java Business Project Template
Single Maven Module Example
Multi Maven Module Example
模块名称 | 是否可选 | 别名 | 作用 | 包含的 | 说明 |
---|---|---|---|---|---|
demo-adapter |
是,如果有专门的平台做RPC到HTTP的协议转换的话不需要 | demo-web ,demo-h5 ,demo-pc ,demo-facade |
PC、ios、Android、H5、Http 协议转换和端适配 | . | . |
demo-client |
否 | demo-api |
. | . | client可能有多个,其他client命名为demo-xxx-client ,其中“xxx”为第三方提供的子包 |
demo-common |
是,公共部分也可以直接放在各个子模块中 | demo-util |
. | . | . |
demo-biz |
是 | . | 试跑业务的逻辑,调用core层 | . | biz可能有多个,其他biz命名为demo-biz-xxx ,其中“xxx”为试跑子业务名称;单测写在包内不在test模块;adapter层的逻辑也在这这个包里 |
demo-core |
否 | demo-service |
. | . | . |
demo-domain |
否 | . | . | . | . |
demo-infra |
是 | . | . | . | . |
demo-start |
否 | demo-applicaption |
. | . | . |
demo-test |
是 | . | . | . | . |
依赖关系图(实线为必选,虚线为可选):
@startuml
(xxx-client) <.down. (biz-xxx)
(biz-xxx) .down.> (core)
(adapter) -down-> (core)
(client) <-down- (core)
(core) -down-> (domain)
(domain) <-down- (infra)
(common) <.up. (core)
(common) <.left. (domain)
(common) <.down. (infra)
(common) <.up. (adapter)
(start) -up-> (adapter)
(start) -left-> (core)
(start) .left.> (biz-xxx)
(test) .up.> (core)
(test) .right.> (domain)
(test) .down.> (infra)
@enduml
mvn archetype:generate \
"-DgroupId=com.companyname.buisnessname" \ # 域名{com,cn,org,etc.}.公司名.{组织名,etc.}.业务名称{组名,BU名称,etc}
"-DartifactId=demo-core" \ # 子模块名称
"-DarchetypeArtifactId=maven-archetype-quickstart" \
"-DinteractiveMode=false"
Adapter
- 调用core层,在core的service上简单做下 参数转换、鉴权、黑名单 等操作
- 封装http、restful接口
Client
...Query.java
...Result.java
...Request.java
...Response.java
- RPC等外部需要需要调用 / 业务接口规范等 定义
- 最好不依赖任何包
- 一般包含
api
,constants
,query
,result
,enums
,exception
基本足够 dto
基本等同于query
+result
- 如果有多个子业务就可以拆分为多个子client,各自定义各自的业务信息
Common
* annotation
...
注:
- core、domain等层都要用的通用框架放在common层,其余的放在对应层
Core
...
- 将domain层的服务编排成产品的功能
Domain
* repository
* mapper
...
- 更多的是定义域能力、域服务、抽象实体等,很少做具体实现
Infra
* mq
* lock
* db
* cache
...
Service(服务化) -> Cache(缓存) + Manager(事务) -> Repository(仓储接口) -> Mapper(DB操作)
- domain层的域能力的实现,持久化层
Start
...
- 启动层
Test
...
- 单测包
Class Type
- POJO
- About Service Layer
...VO.java
(View Object) 显示层对象,通常是Web向模板渲染引擎层传输的对象。...DTO.java
(Data Transfer Object) 数据传输对象,Service或Manager向外传输的对象。...DO.java
(Domain Object) 领域对象...DO.java
(Data Object) 与数据库表结构一一对应,通过DAO层向上传输数据源对象。...PO.java
(Persistent Object) 持久对象...BO.java
(business object) 业务对象,由Service层输出的封装业务逻辑的对象。...POJO.java
(plain ordinary java object) 简单无规则 java 对象,POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。...DAO.java
(data access object) 数据访问对象...TO.java
(Transfer Object) 数据传输对象...AO.java
(Application Object) 应用对象,在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
- About Controller/Web/Adapter Layer
...Query.java
数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁止使用Map类来传输...Result.java
...Request.java
...Response.java
...Command.java
命令,更新操作
- About Service Layer
- Other
...Factory.java
工厂方法...Manager.java
持久化相关...Repository.java
CRUD接口...Builder.java
组装对象(变量/类)...Writer.java
...Reader.java
...Handler.java
...Service.java
服务接口...Controller.java
...Driver.java
...Converter.java
...Transfer.java
...Mapper.java
...Policy.java
业务惯例,约束...Specification.java
规格...Event.java
领域事件类...Helper.java
助手类,帮助完成某类操作的工具类...Utils.java
工具类
CateLog
com
域名,例如:cn,com,org,etccompanyname
公司名或组织名,例如:google,apache,etc.businessname
BU名或业务名称或平台名称等sub_package_name
子包名称dts
定时任务service
服务mapper
manager
dao
cache
utils
工具包enums
constant
builder
converter
switchs
gray
exception
log
annotation
api
dto
controller
mq
消息队列- ...