模块化项目结构划分

一、设计核心原则

  1. Git 拆分友好:前后端、公共库物理隔离,可直接拆分为 3 个独立 Git 仓库
  2. 职责单一清晰:前后端彻底解耦,不交叉耦合业务/持久化代码
  3. 分层标准规范:遵循 DDD 领域驱动设计,兼容现有业务模块
  4. 可维护可扩展:支持多客户端、多服务端、插件化开发

二、根目录结构(总仓库)

1
2
3
4
5
项目根目录/
├── .gitignore、README.md、.editorconfig # 全局配置文件
├── Client/ # 【独立仓库】客户端(纯UI+接口调用)
├── Server/ # 【独立仓库】服务端(纯业务+数据持久化)
└── Shared/ # 【独立仓库】公共库(前后端共享代码)

三、客户端模块(Client)- 纯前端展示层

1
2
3
4
5
6
7
8
9
10
11
12
Client/
├── src/
│ ├── Presentation/ # 表现层(UI核心)
│ │ ├── Controls/ # 控件、样式库
│ │ ├── Modules/ # 业务模块(页面、本地逻辑)
│ │ └── Addons/ # 客户端插件/扩展
│ ├── Services/ # 服务封装层
│ │ ├── Api/ # 远程接口调用
│ │ └── Local/ # 本地服务(缓存、文件)
│ ├── Utils/ # 客户端专属工具
│ └── Assets/ # 静态资源
└── tests/ # 客户端测试

四、服务端模块(Server)- 纯业务数据层

1
2
3
4
5
6
7
8
Server/
├── src/
│ ├── Api/ # 接口层(对外提供服务)
│ ├── Application/ # 应用层(业务编排)
│ ├── Domain/ # 领域层(核心实体、业务规则)
│ ├── Persistence/ # 数据持久层(数据库、仓储)
│ └── Infrastructure/# 基础层(日志、缓存、通用组件)
└── tests/ # 服务端测试

五、公共库模块(Shared)- 前后端通用层

1
2
3
4
5
Shared/
├── src/
│ ├── Shared.Core/ # 核心共享(DTO、枚举、常量、接口)
│ └── Shared.Utils/ # 通用工具(加密、序列化、验证)
└── tests/ # 公共库测试

六、单体应用结构

针对无需拆分前后端独立仓库的单体式应用场景,设计如下标准化目录结构,兼顾分层规范与开发便捷性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
单体应用根目录/
├── Solution Item/ # 解决方案级配置项
│ ├── .gitignore # Git忽略规则
│ ├── README.md # 项目说明文档
│ ├── .editorconfig # 编辑器格式统一配置
│ └── Solution.sln # 解决方案文件(如.NET)
├── Presentation Layer/ # 展示层(UI交互核心)
│ ├── 1.1 Controls/ # 控件、样式库
│ │ ├── Common/ # 通用基础控件(按钮、表格、弹窗等)
│ │ ├── Business/ # 业务专属控件(定制化表单、图表等)
│ │ └── Styles/ # 样式文件(主题、布局、全局样式)
│ ├── 1.2 Modules/ # 业务模块(按功能域划分)
│ │ ├── User/ # 用户模块(登录、注册、个人中心)
│ │ ├── Order/ # 订单模块(下单、支付、物流)
│ │ └── Product/ # 商品模块(列表、详情、库存)
│ └── 1.3 Addons/ # 插件扩展(非核心功能)
│ ├── Print/ # 打印插件
│ ├── Export/ # 导出插件
│ └── Notification/ # 消息通知插件
├── 2. Service Layer/ # 服务层(业务逻辑编排)
│ ├── UserService/ # 用户相关服务
│ ├── OrderService/ # 订单相关服务
│ ├── ProductService/# 商品相关服务
│ └── ServiceBase/ # 服务基类(通用方法、异常处理)
├── 3. Persistence Layer/ # 数据层(数据存取)
│ ├── Repositories/ # 仓储实现
│ │ ├── UserRepository.cs
│ │ ├── OrderRepository.cs
│ │ └── ProductRepository.cs
│ ├── DataContext/ # 数据上下文(数据库连接、ORM配置)
│ ├── Migrations/ # 数据迁移脚本(如EF Core迁移)
│ └── SqlScripts/ # 原生SQL脚本(复杂查询、批量操作)
├── 4. Domain Layer/ # 领域层(核心业务规则)
│ ├── Entities/ # 领域实体(User、Order、Product)
│ ├── ValueObjects/ # 值对象(Address、Money、DateTimeRange)
│ ├── Aggregates/ # 聚合根(OrderAggregate、UserAggregate)
│ ├── DomainEvents/ # 领域事件(OrderCreatedEvent、UserUpdatedEvent)
│ └── DomainServices/# 领域服务(跨实体业务规则)
├── 5. Infrastructure Layer/ # 基础设施层(通用能力支撑)
│ ├── Logging/ # 日志组件(日志记录、存储、查询)
│ ├── Caching/ # 缓存组件(Redis、MemoryCache)
│ ├── Authentication/# 认证授权(Token、权限验证)
│ ├── HttpClient/ # 第三方接口调用
│ └── Configuration/ # 配置管理(配置读取、动态更新)
├── 6. Tools/ # 工具层(通用工具类)
│ ├── Encryption/ # 加密解密(MD5、RSA、AES)
│ ├── Serialization/ # 序列化(JSON、XML、Protobuf)
│ ├── Validation/ # 数据验证(参数校验、规则验证)
│ └── Extensions/ # 扩展方法(字符串、集合、日期扩展)
├── 7. Examples/ # 示例代码(参考用例)
│ ├── ApiExamples/ # 接口调用示例
│ ├── BusinessExamples/ # 业务场景示例
│ ├── IntegrationExamples/ # 第三方集成示例
│ └── UnitTestExamples/ # 单元测试示例
└── Tests/ # 测试目录
├── UnitTests/ # 单元测试
├── IntegrationTests/ # 集成测试
└── UiTests/ # UI测试

单体应用分层职责说明

  1. Solution Item:统一存放解决方案级的配置文件,确保项目根目录整洁,配置文件全局复用;

  2. Presentation Layer:仅负责UI展示、用户交互,不包含业务逻辑,通过调用服务层完成功能,其中:

    1. Controls:封装可复用的UI控件和样式,降低页面开发重复度;

    2. Modules:按业务功能域划分页面模块,边界清晰;

    3. Addons:封装非核心的扩展功能,支持插件化启停;

  3. Service Layer:承接展示层的调用请求,编排领域层能力完成业务逻辑,是展示层与领域层的中间层,解耦UI与核心业务;

  4. Persistence Layer:仅负责数据的持久化和读取,不包含业务规则,通过仓储模式封装数据操作,适配不同数据源;

  5. Domain Layer:核心业务规则层,包含实体、值对象、聚合根等领域模型,是整个应用的业务核心,不依赖其他层;

  6. Infrastructure Layer:为各层提供通用技术能力,如日志、缓存、认证等,封装第三方组件,降低耦合;

  7. Tools:提供全项目通用的工具类,无业务耦合,可独立复用;

  8. Examples:提供各类场景的示例代码,降低新开发者的上手成本,包含接口调用、业务场景、测试等示例。

七、分层职责说明(通用)

  1. 客户端:只负责 UI 展示、本地交互、远程接口调用,无业务/数据库代码

  2. 服务端:只负责业务逻辑、数据存储、接口提供,无 UI 代码

  3. 公共库:只提供前后端通用代码,无业务耦合,可独立打包复用

  4. 单体应用:各分层职责与上述一致,通过一体化结构整合前后端能力,适配小型项目、快速开发场景,同时保留DDD分层思想,便于后续拆分为分布式架构。

总结

  • 结构极简:拆分模式下3大核心模块,单体模式下8大分层,均做到边界清晰、一目了然;

  • 拆分便捷:分布式结构可直接独立为Git仓库,单体结构可按需拆分为分布式架构,零成本解耦;

  • 分工明确:前后端/各分层各司其职,后期维护、扩展更高效;

  • 场景适配:同时覆盖分布式拆分、单体一体化两种场景,兼顾大型项目解耦需求和小型项目快速开发需求。