Skip to content

总体目录结构(模块化设计)

text
.
├── 📁 _docs                     # 项目文档
│   ├── 📄 ARCHITECTURE.md       # 架构设计
│   └── 📄 DEPLOYMENT.md         # 部署指南

├── 📁 _infra                    # 基础设施配置
│   ├── 📁 docker               # Docker 容器配置
│   ├── 📁 k8s                  # Kubernetes 部署文件
│   └── 📁 terraform            # 云服务编排(AWS/GCP)

├── 📁 modules                  # 核心业务模块(每个模块独立)
│   ├── 📁 common               # 公共模块(工具、通用组件)
│   ├── 📁 user                 # 用户模块(完整分层架构)
│   ├── 📁 order                # 订单模块
│   └── ...                     # 其他业务模块

├── 📁 services                 # 微服务入口(独立部署)
│   ├── 📁 gateway              # API 网关服务
│   ├── 📁 user-service         # 用户微服务
│   └── ...                     # 其他微服务

├── 📁 libs                     # 自研工具库(可选)
│   ├── 📁 auth-client          # 统一认证客户端
│   └── 📁 logging-starter      # 日志 Starter

├── 📄 pom.xml                  # 父级 Maven 配置(聚合模块)
└── 📄 README.md                # 项目总览

单个业务模块(以 user 模块为例)

text
📁 user
├── 📁 src/main/java
│   └── 📁 com.company.user
│       ├── 📁 api              # 接口层(API 定义)
│       │   ├── 📁 rest         # REST Controller
│       │   ├── 📁 rpc          # RPC 接口(如 gRPC)
│       │   └── 📁 event        # 消息订阅/发布(如 Kafka)
│       │
│       ├── 📁 application      # 应用层(业务流程编排)
│       │   ├── 📁 command      # 命令处理(CQRS)
│       │   ├── 📁 query        # 查询处理(CQRS)
│       │   └── 📁 service      # 应用服务(事务、权限)
│       │
│       ├── 📁 domain           # 领域层(DDD 核心)
│       │   ├── 📁 model        # 聚合根、实体、值对象
│       │   ├── 📁 repository   # 仓库接口(领域层定义)
│       │   ├── 📁 event        # 领域事件
│       │   └── 📁 service      # 领域服务(无状态逻辑)
│       │
│       ├── 📁 infrastructure   # 基础设施层(实现细节)
│       │   ├── 📁 persistence  # 数据库实现(JPA/MyBatis)
│       │   ├── 📁 cache        # 缓存实现(Redis)
│       │   ├── 📁 client       # 外部服务调用(Feign)
│       │   └── 📁 message      # 消息队列实现(Kafka/RabbitMQ)
│       │
│       └── 📁 config           # 模块配置类(Spring Beans)
│           ├── 📄 WebConfig.java
│           └── 📄 SecurityConfig.java

├── 📁 src/main/resources
│   ├── 📁 db/migration         # 数据库迁移脚本(Flyway)
│   ├── 📁 i18n                 # 国际化资源
│   ├── 📄 application.yml       # 主配置
│   └── 📄 application-dev.yml  # 开发环境配置

├── 📁 src/test                 # 测试代码
│   ├── 📁 java                 
│   │   ├── 📁 application      # 应用层测试
│   │   ├── 📁 domain           # 领域层测试
│   │   └── 📁 api              # API 集成测试
│   └── 📁 resources            # 测试资源

└── 📄 pom.xml                  # 模块依赖配置

关键分层详解

1. 接口层 (api)

职责:处理外部请求(HTTP/RPC/消息),仅做参数校验和格式转换。 • 示例代码

java
@RestController
public class UserController {
    @PostMapping("/users")
    public UserResponse createUser(@Valid @RequestBody UserRequest request) {
        return userAppService.createUser(request);
    }
}

2. 应用层 (application)

职责:编排领域对象,处理事务、权限和跨领域协调。 • CQRS 示例

java
public class UserCommandHandler {
    public void handle(CreateUserCommand command) {
        User user = UserFactory.create(command);
        userRepository.save(user);
        eventPublisher.publish(new UserCreatedEvent(user.getId()));
    }
}

3. 领域层 (domain)

职责:封装核心业务逻辑,不依赖任何外部框架。 • 聚合根示例

java
public class User {
    public void changePassword(String newPassword) {
        if (newPassword.length() < 8) {
            throw new InvalidPasswordException();
        }
        this.password = encrypt(newPassword);
    }
}

4. 基础设施层 (infrastructure)

职责:实现技术细节(数据库、缓存、消息队列)。 • 仓库实现示例

java
@Repository
public class UserRepositoryImpl implements UserRepository {
    @Autowired
    private JpaUserRepository jpaRepo;

    @Override
    public User findById(Long id) {
        return jpaRepo.findById(id).orElseThrow();
    }
}

微服务目录示例(user-service

text
📁 user-service
├── 📁 src/main/java
│   └── 📁 com.company.user.service
│       ├── 📁 bootstrap         # 服务启动类
│       ├── 📁 adapter          # 适配其他服务的客户端
│       └── 📁 config            # 服务专属配置
├── 📁 src/main/resources
│   ├── 📄 bootstrap.yml        # Spring Cloud 配置
│   └── 📄 application.yml      # 服务配置
├── 📁 k8s                      # 独立部署配置
│   └── 📄 deployment.yaml
└── 📄 Dockerfile

核心原则

  1. 模块独立:每个业务模块可独立编译、测试和部署。
  2. 分层依赖
    text
    接口层 → 应用层 → 领域层 ← 基础设施层
  3. 技术无关性:领域层不依赖 Spring、数据库等具体技术。

适用场景

微服务架构:每个模块可拆分为独立服务。 • 复杂业务系统:电商平台、金融系统、ERP 等。 • 团队协作:模块由不同团队负责,减少代码冲突。

通过此结构,超大型项目可以保持 高内聚、低耦合,轻松应对业务扩展和技术演进。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer