daidai21 / JavaBizProjectTemplate

Java Business Project Template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 命令,更新操作
  • 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,etc
    • companyname 公司名或组织名,例如: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 消息队列
          • ...

Ref

About

Java Business Project Template


Languages

Language:Java 100.0%