Skip to content

Latest commit

 

History

History
234 lines (225 loc) · 13.2 KB

00_项目分层结构介绍.md

File metadata and controls

234 lines (225 loc) · 13.2 KB

项目分层结构介绍

简介

<basePackage>org.netcorepal.cap4j.ddd.example</basePackage> 
mvn cap4j-ddd-codegen:gen-arch

基于基础包路径配置,cap4j-ddd-codegen插件在maven项目源码目录src/main/java/org/netcorepal/cap4j/ddd/example下将会生成4个package

  • _share 公共代码
  • adapter 适配层(Interface Adapter)
  • application 应用层(Application Business Rules)
  • domain 领域层(Enterpprise Business Rules)

以上代码分层完全遵循整洁架构对于代码分层组织的观点。 当然,如果你有自己的理解,插件也支持完全自主的自定义模板,仅需自己修改脚手架模板cap4j-ddd-codegen-template.json并应用即可。 整洁架构

领域层

实现领域模型,聚合、实体、领域事件以及集成事件定义。

└── org.netcorepal.cap4j.ddd.example
    └── domain
        ├── _share (领域层公共代码,仅供领域层引用)
        ├── aggregates (聚合)
        └── services (领域服务)

聚合内部包定义。

└── aggregates
    └── order
        ├── Order.java (聚合根)
        ├── OrderItem.java (实体)
        ├── enums (枚举)
        │   └── OrderStatus.java
        ├── events (领域事件)
        │   └── OrderPlacedDomainEvent.java
        ├── factory (聚合工厂)
        │   ├── OrderFactory.java (聚合工厂类)
        │   └── OrderPayload.java (工厂负载)
        ├── schemas
        │   ├── OrderItemSchema.java
        │   └── OrderSchema.java
        └── specs (实体规格约束)
            └── OrderSpecification.java

应用层

实现CQS模式,将功能用例(UseCase)抽象成命令(Command)或查询(Query)来实现。

└── org.netcorepal.cap4j.ddd.example
    └── application
        ├── _share (应用层公共代码,仅供领域层引用)
        │   └── enums (应用层枚举类型)
        ├── clients (防腐层:包装三方服务调用接口)
        ├── commands (CQS的C:命令)
        ├── distributed (分布式)
        ├   ├── events (声明三方服务集成事件)
        │   └── sagas (SAGA是一种分布式事务最终一致性方案)
        ├── queries (CQS的Q:查询)
        └── subscribers (事件的订阅处理逻辑,或者称为eventhandlers)
            ├── domain (领域事件订阅处理逻辑)
            └── integration (集成事件订阅处理逻辑)

适配层

适配字面意思,放置各层(领域层domain、应用层application)定义的接口实现。整洁架构中称其为接口适配层(Interface Adapters)。

该层是领域层和应用层业务逻辑所依赖抽象接口的技术适配实现,适配层设计是DI原则的实践。

举个例子来理解抽象接口,比如我们常见的电商场景,用户在商城下单,需要通知仓库打包发货。那么这个通知可能就会需要抽象出一个通知功能接口,来承接下单流程的顺利进行。 通知功能接口的定义(方法签名、入参、出参等)是应用层关心的事。但是通知功能接口如何实现,就是适配层的事了,通过短信也好、电话也好,能够实现通知功能接口定义的核心效果即可。

└── org.netcorepal.cap4j.ddd.example
    └── adapter
        ├── _share (适配层公共代码,仅供适配层引用)
        │   └── configure
        │       └── ApolloConfig.java (配置中心)
        ├── application (应用层接口实现)
        │   ├── _share
        │   │   └── configure
        │   │       └── MyIntegrationEventInterceptor.java (集成事件拦截器)
        │   ├── distributed
        │   │   └── clients (防腐端实现)
        │   └── queries (查询请求适配实现)
        ├── domain (领域层接口实现)
        │   ├── _share
        │   │   └── configure
        │   │       ├── MyDomainEventInterceptor.java (领域事件拦截器)
        │   │       └── MyEventMessageInterceptor.java (事件消息拦截器)
        │   └── repositories (实现聚合仓储接口)
        ├── infra (基础设施适配接口实现)
        │   ├── _share
        │   ├── jdbc (服务于应用层CQS的Q,jdbc查询工具类)
        │   │   └── NamedParameterJdbcTemplateDao.java
        │   └── mybatis (服务于应用层CQS的Q,mybatis集成) 
        │       ├── _share
        │       │   └── MyEnumTypeHandler.java
        │       └── mapper
        └── portal (端口)
            ├── api (SpringMVC相关代码)
            │   ├── TestController.java
            │   └── _share
            │       ├── ResponseData.java
            │       ├── Status.java
            │       └── configure
            │           ├── CommonExceptionHandler.java
            │           ├── MvcConfig.java
            │           └── SwaggerConfig.java
            ├── jobs (定时任务相关代码)
            │   └── _share
            │       └── configure
            │           └── XxlJobConfig.java
            └── queues (消息队列相关代码)

公共代码

放置公共代码。

└── org.netcorepal.cap4j.ddd.example
    └── _share
        ├── CodeEnum.java  (响应状态码枚举)
        ├── Constants.java (公共常量)
        └── exception (自定义业务异常)
            ├── ErrorException.java
            ├── KnownException.java
            └── WarnException.java

项目目录树

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── org
    │   │       └── netcorepal
    │   │           └── cap4j
    │   │               └── ddd
    │   │                   └── example
    │   │                       ├── StartApplication.java
    │   │                       ├── _share
    │   │                       │   ├── CodeEnum.java
    │   │                       │   ├── Constants.java
    │   │                       │   └── exception
    │   │                       │       ├── ErrorException.java
    │   │                       │       ├── KnownException.java
    │   │                       │       └── WarnException.java
    │   │                       ├── adapter
    │   │                       │   ├── _share
    │   │                       │   │   └── configure
    │   │                       │   │       └── ApolloConfig.java
    │   │                       │   ├── application
    │   │                       │   │   ├── _share
    │   │                       │   │   │   └── configure
    │   │                       │   │   │       └── MyIntegrationEventInterceptor.java
    │   │                       │   │   ├── distributed
    │   │                       │   │   │   └── clients (防腐端实现)
    │   │                       │   │   └── queries (查询请求适配实现)
    │   │                       │   ├── domain
    │   │                       │   │   ├── _share
    │   │                       │   │   │   └── configure
    │   │                       │   │   │       ├── MyDomainEventInterceptor.java
    │   │                       │   │   │       └── MyEventMessageInterceptor.java
    │   │                       │   │   └── repositories
    │   │                       │   ├── infra
    │   │                       │   │   ├── _share
    │   │                       │   │   ├── jdbc
    │   │                       │   │   │   └── NamedParameterJdbcTemplateDao.java
    │   │                       │   │   └── mybatis
    │   │                       │   │       ├── _share
    │   │                       │   │       │   └── MyEnumTypeHandler.java
    │   │                       │   │       └── mapper
    │   │                       │   └── portal
    │   │                       │       ├── api
    │   │                       │       │   ├── TestController.java
    │   │                       │       │   └── _share
    │   │                       │       │       ├── ResponseData.java
    │   │                       │       │       ├── Status.java
    │   │                       │       │       └── configure
    │   │                       │       │           ├── CommonExceptionHandler.java
    │   │                       │       │           ├── MvcConfig.java
    │   │                       │       │           └── SwaggerConfig.java
    │   │                       │       ├── jobs
    │   │                       │       │   └── _share
    │   │                       │       │       └── configure
    │   │                       │       │           └── XxlJobConfig.java
    │   │                       │       └── queues
    │   │                       ├── application
    │   │                       │   ├── _share
    │   │                       │   │   └── enums
    │   │                       │   │── commands
    │   │                       │   ├── distributed
    │   │                       ├   │   ├── events
    │   │                       │   │   └── sagas
    │   │                       │   ├── queries
    │   │                       │   └── subscribers
    │   │                       │       ├── domain
    │   │                       │       └── integration
    │   │                       └── domain
    │   │                           ├── _share
    │   │                           ├── aggregates
    │   │                           │   └── order (示例聚合)
    │   │                           │        ├── Order.java (聚合根)
    │   │                           │        ├── OrderItem.java (实体)
    │   │                           │        ├── enums (枚举)
    │   │                           │        │   └── OrderStatus.java
    │   │                           │        ├── events (领域事件)
    │   │                           │        │   └── OrderPlacedDomainEvent.java
    │   │                           │        ├── factory (聚合工厂)
    │   │                           │        │   ├── OrderFactory.java (聚合工厂类)
    │   │                           │        │   └── OrderPayload.java (工厂负载)
    │   │                           │        ├── schemas
    │   │                           │        │   ├── OrderItemSchema.java
    │   │                           │        │   └── OrderSchema.java
    │   │                           │        └── specs (实体规格约束)
    │   │                           │            └── OrderSpecification.java
    │   │                           └── services
    │   └── resources
    │       ├── mapper
    │       ├── application.properties
    │       ├── ddl.sql
    │       └── logback.xml
    └── test
        └── java
            └── org
                └── netcorepal
                    └── cap4j
                        └── ddd
                            └── example
                                └── AppTest.java