业务系统:真正完成程序要解决的问题

业务系统是程序的第二个角色——它真正完成程序要解决的问题。其他角色(入口、通信)都是围绕它转的:入口把输入送进来,通信把消息送进来,业务系统把问题解决掉。业务系统按模块组织,模块 = 数据结构 + 算法 + 接口。


一、业务系统是什么

业务系统的职责一句话:

真正完成程序要解决的问题。

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());
// 转换成 HTTP Response
}

同一套业务能力,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
业务系统 = 真正完成程序要解决的问题
其他角色都围绕它转

组织单位:模块(原子接口 + 数据结构 + 算法)

设计路线:模块划分 → 职责 → 关系 → 接口 → 内部

边界:入口/通信调用业务,业务不反向依赖

可做成库:同一业务,多入口复用

内部按领域组织:对象 / 关系 / 规则 / 算法

业务系统是程序存在的理由。 入口和通信都是它的服务者——把输入和消息送到它面前,由它真正解决问题。