业务系统:真正完成程序要解决的问题
业务系统是程序的第二个角色——它真正完成程序要解决的问题。其他角色(入口、通信)都是围绕它转的:入口把输入送进来,通信把消息送进来,业务系统把问题解决掉。业务系统按模块组织,模块 = 数据结构 + 算法 + 接口。
一、业务系统是什么
业务系统的职责一句话:
真正完成程序要解决的问题。
1 2 3
| 入口系统:输入怎么进来 → 调用业务 通信系统:消息怎么收发 → 调用业务 业务系统:问题怎么解决 ← 被调用
|
其他角色都是「围绕业务转」的——业务系统才是程序存在的理由。
二、业务系统的组织单位:模块
业务系统的核心组织单位是模块:
1 2 3 4
| 业务系统 ├── Service 业务任务组织 ├── Domain 业务数据结构(ProcessInfo 等业务对象) └── Algorithm 业务算法
|
模块内部:
1 2 3 4
| 模块 ├── 原子接口 (怎么被调用) ├── 数据结构 (数据怎么表示) └── 算法 (怎么计算)
|
业务系统的核心组织单位就是模块,模块内部再由接口、数据结构、算法等构成,不应硬塞一个「组件设计」进去。(组件设计是通信系统的组织方式。)
三、业务系统的设计路线
1 2 3 4 5 6 7 8 9 10 11
| 业务系统 ↓ 模块划分(按功能分) ↓ 模块职责(每个模块做什么) ↓ 模块之间关系(谁依赖谁) ↓ 模块接口(怎么被调用) ↓ 模块内部(原子接口 + 数据结构 + 算法)
|
从指令到系统主线的完整路径:
1 2 3
| 业务按功能分模块 → process_list / memory_scan / file_io → 每个模块 = 数据 + 算法 + 接口
|
四、业务系统与入口/通信的边界
1 2 3 4 5 6 7 8
| 入口系统:调用业务接口,不实现业务 → ProcessCommand → ProcessService → ProcessManager
通信系统:把消息送给业务,不实现业务 → Handler → Service(Handler 只做转换)
业务系统:真正实现业务 → Service → Domain → Algorithm
|
边界原则:
1 2 3
| ✅ 入口/通信 调用业务,业务不反向依赖它们 ✅ 入口/通信 不知道业务内部怎么实现 ✅ 业务系统独立演化、独立测试
|
五、业务系统可以做成库
业务系统通常是静态库,被多个入口复用:
1 2 3 4 5 6
| business/ ├── include/ LoginService.h / UserService.h ├── src/ LoginService.cpp / UserService.cpp ├── domain/ ├── algorithm/ └── CMakeLists.txt → libbusiness.a
|
1 2 3 4 5 6
| #include <business/LoginService.h>
void LoginHandler::handle(const Request& request) { auto result = LoginService::login(request.username(), request.password()); }
|
同一套业务能力,CLI、GUI、Server、测试程序都可以调用。
六、业务系统的领域组织
业务系统内部按领域组织(对应领域模型/领域对象分析线):
1 2 3 4 5
| 业务系统 ├── Domain 对象 ProcessInfo / Breakpoint / ImageFile ├── Domain 关系 进程包含线程,图片属于文件夹 ├── Domain 规则 状态转换、业务规则 └── Domain 算法 搜索、排序、校验
|
1 2 3 4 5
| 调试器业务系统: Process / Module / Thread / Breakpoint / Symbol
图片管理器业务系统: Project / Folder / ImageFile / SearchQuery
|
七、和其他内容的关系
1 2 3 4 5 6 7 8 9 10 11
| 业务系统 ←→ 从指令到系统/01 01 的终点就是业务系统(由模块组成)
业务系统 ←→ 领域模型 / 领域对象分析 业务系统内部按领域组织(对象/关系/规则)
业务系统 ←→ 服务器 服务器是入口系统,业务系统是它调用的能力库
业务系统 ←→ 系统角色主题 03 是主题的第三个角色(真正解决问题)
|
收束
1 2 3 4 5 6 7 8 9 10 11 12
| 业务系统 = 真正完成程序要解决的问题 其他角色都围绕它转
组织单位:模块(原子接口 + 数据结构 + 算法)
设计路线:模块划分 → 职责 → 关系 → 接口 → 内部
边界:入口/通信调用业务,业务不反向依赖
可做成库:同一业务,多入口复用
内部按领域组织:对象 / 关系 / 规则 / 算法
|
业务系统是程序存在的理由。 入口和通信都是它的服务者——把输入和消息送到它面前,由它真正解决问题。