25 KiB
企业级目标业务架构文档
本文档定义的是本项目后续重构应对齐的目标态企业级业务架构。
如果当前实现与本文档不一致,以本文档作为未来架构和业务规则的基线。
本文档只讨论:
- 业务目标
- 领域划分
- 核心业务对象
- 模块职责
- 核心流程
- 统一业务规则
- 状态定义与状态流转
- 权限模型
本文档不讨论:
- 实施计划
- 任务排期
- 测试清单
- 当前实现细节的迁移步骤
1. 文档目标与适用范围
1.1 文档目标
这份文档用于建立一个可长期演进的企业级业务架构基线,使后续开发、重构、测试设计和 Code Review 都围绕同一套业务语义进行,而不是继续围绕局部实现细节做增量修补。
1.2 适用范围
本文适用于以下业务域:
- 身份与访问控制
- 用户工作空间
- 文件内容资产
- 分享与外部分发
- 快传
- 后台任务
- 存储治理
- 运营与管理
2. 系统定位
系统定位为:
以个人和组织成员文件资产为中心的统一文件服务平台
平台的核心价值不是“存文件”本身,而是:
- 统一身份
- 统一文件资产模型
- 统一分享与传输能力
- 统一治理、审计和存储策略
平台面向三类对象:
- 最终用户
- 运营/支持人员
- 系统管理员
3. 架构原则
3.1 业务规则必须有唯一归属
每一条核心业务规则都必须有唯一归属域,不允许在多个 Service、多个控制器或多个前端页面中各自实现一套。
3.2 逻辑文件与物理内容分离
用户看到的文件、目录、分享、回收站等都属于逻辑资产层。
对象存储中的字节内容、版本、缩略图、转码产物等属于内容资产层。
3.3 权限模型独立于页面和接口
权限必须由统一授权模型决定,而不是由页面入口、控制器路径或配置白名单临时拼接。
3.4 同类能力统一入口
分享、上传、后台任务、管理设置等同类能力必须有统一入口和统一语义,不允许长期双轨并存。
3.5 业务状态优先于技术状态
系统对外表达的状态必须是业务状态,而不是底层实现状态的直接暴露。
3.6 删除是业务动作,不是物理动作
删除、恢复、过期清理必须服从业务生命周期,不允许把物理对象操作直接等同于业务删除。
4. 角色模型
目标态采用四层角色模型:
VISITORMEMBEROPERATORADMIN
4.1 VISITOR
定义:
- 未登录访问者
可执行:
- 访问公开分享
- 接收公开可接收的传输会话
不可执行:
- 访问个人工作空间
- 创建需要归属主体的业务对象
- 执行管理操作
4.2 MEMBER
定义:
- 普通登录用户
可执行:
- 管理自己的工作空间
- 上传、下载、删除、恢复、复制、移动、重命名自己的文件
- 创建和管理自己的分享
- 创建和管理自己的传输会话
- 导入外部文件到自己的工作空间
- 查看和管理自己的后台任务
4.3 OPERATOR
定义:
- 运营或支持角色
职责:
- 处理支持型治理工作
- 查看全局业务对象
- 处理受控的运营动作
限制:
- 不直接拥有系统级配置权限
- 不直接替代系统管理员
4.4 ADMIN
定义:
- 系统治理角色
职责:
- 管理系统级策略、权限、存储、任务与全局设置
4.5 角色模型规则
- 角色是授权模型的一部分,不是页面装饰字段
- 所有管理能力必须绑定
OPERATOR或ADMIN - 工作空间资源的所有权规则优先于角色扩权
- 高风险管理动作必须具备审计记录
5. 领域划分
目标态系统划分为八个核心业务域。
5.1 身份与访问控制域
职责:
- 注册
- 登录
- 会话管理
- 令牌刷新
- 账号状态
- 角色授权
- 邀请码控制
产出对象:
- 账号
- 会话
- 角色
- 授权上下文
5.2 用户工作空间域
职责:
- 管理用户视角下的目录树
- 管理逻辑文件节点
- 管理回收站生命周期
- 管理工作空间内的复制、移动、重命名、恢复
产出对象:
- 工作空间
- 工作空间节点
- 回收站记录
5.3 内容资产域
职责:
- 管理物理内容对象
- 管理内容版本
- 管理内容引用关系
- 管理派生产物
产出对象:
- 内容资产
- 内容版本
- 派生资产
5.4 分享与外部分发域
职责:
- 管理公开分享
- 管理分享口令、额度、有效期、权限范围
- 管理通过分享进入系统的导入动作
产出对象:
- 分享链接
- 分享策略
- 分享访问记录
5.5 快传域
职责:
- 管理在线传输会话
- 管理离线传输会话
- 管理传输文件清单
- 管理传输接收、导入与过期
产出对象:
- 传输会话
- 传输条目
- 取件码
5.6 后台任务域
职责:
- 管理异步任务生命周期
- 管理任务重试
- 管理租约、心跳、进度
- 承载需要异步执行的文件处理任务
产出对象:
- 任务
- 任务执行记录
5.7 存储治理域
职责:
- 管理存储策略
- 管理对象落点规则
- 管理上传能力矩阵
- 管理存储策略迁移
产出对象:
- 存储策略
- 存储能力
- 存储迁移批次
5.8 运营与管理域
职责:
- 提供全局治理能力
- 管理系统配置
- 提供运营视图与审计入口
产出对象:
- 系统设置
- 审计记录
- 管理操作记录
6. 核心业务对象
目标态采用以下统一业务对象模型。
6.1 Account
表示平台主体账号。
关键属性:
accountIdusernameemailphoneNumberstatusrolequotaPolicy
6.2 Session
表示一个被授权的登录会话。
关键属性:
sessionIdaccountIdclientTypestatusissuedAtexpiresAt
6.3 Workspace
表示用户的逻辑文件空间。
关键属性:
workspaceIdownerAccountIdstatus
6.4 WorkspaceNode
表示工作空间中的逻辑节点。
节点类型:
DIRECTORYFILE
关键属性:
nodeIdworkspaceIdparentNodeIdnamenodeTypelifecycleStatecontentBinding
说明:
- 目录节点只承担层级结构
- 文件节点绑定内容资产引用
6.5 ContentAsset
表示可被逻辑节点引用的内容资产。
关键属性:
assetIdassetTypecurrentVersionIdownerScoperetentionPolicy
6.6 ContentVersion
表示一份具体内容版本。
关键属性:
versionIdassetIdobjectKeystoragePolicyIdsizecontentTypechecksumversionState
规则:
- 内容版本一旦完成写入后应视为不可变
6.7 ShareGrant
表示一条对外分享授权。
关键属性:
shareIdownerAccountIdtargetNodeIdaccessPolicystatusexpiresAt
6.8 TransferSession
表示一条临时传输会话。
关键属性:
transferIdmodeownerAccountIdstatuspickupCodeexpiresAt
模式:
ONLINEOFFLINE
6.9 TransferItem
表示一条传输会话中的文件项。
关键属性:
transferItemIdtransferIdnamerelativePathsizecontentTypestate
6.10 AsyncJob
表示系统异步任务。
关键属性:
jobIdjobTypeownerAccountIdstatusretryPolicylease
6.11 StoragePolicy
表示一类存储落点规则。
关键属性:
storagePolicyIdpolicyTypecapabilitySetmaxObjectSizestatusisDefault
6.12 SystemSetting
表示系统级业务配置。
关键属性:
settingKeysettingScopevaluemutability
7. 模块职责与协作边界
7.1 身份模块
负责:
- 账号生命周期
- 会话与令牌
- 角色与授权上下文
不得负责:
- 文件配额判断
- 工作空间结构
- 存储策略选择
7.2 工作空间模块
负责:
- 目录树
- 文件节点生命周期
- 删除、恢复、移动、复制、重命名
不得负责:
- 内容对象的物理写入
- 分享规则
- 传输协议
7.3 内容资产模块
负责:
- 内容对象写入完成后的登记
- 版本不可变规则
- 引用关系
- 内容级派生产物
不得负责:
- 工作空间路径语义
- 分享口令和访问额度
7.4 分享模块
负责:
- 对外访问授权
- 过期、口令、额度和权限范围
不得负责:
- 目录树变更
- 内容落库存储
7.5 快传模块
负责:
- 传输会话组织
- 在线传输的时效和接收关系
- 离线传输的文件接收与导入
不得负责:
- 普通分享
- 工作空间目录治理
7.6 后台任务模块
负责:
- 长耗时业务处理
- 重试和失败分类
不得负责:
- 同步主流程判断
7.7 存储治理模块
负责:
- 定义上传能力
- 定义内容落点
- 定义迁移规则
不得负责:
- 页面或客户端自己决定上传模式
7.8 管理模块
负责:
- 全局治理入口
- 系统设置和审计入口
不得负责:
- 绕开领域规则直接改写核心业务对象
8. 核心业务流程
8.1 账号注册流程
- 用户提交注册信息
- 系统校验唯一性与注册策略
- 系统验证邀请码
- 创建
Account - 初始化
Workspace - 签发首个
Session
8.2 登录流程
- 用户提交凭证
- 系统校验账号状态
- 创建或替换对应客户端的
Session - 发放访问令牌与刷新令牌
8.3 文件接入流程
- 用户发起上传
- 系统依据
StoragePolicy返回可用上传策略 - 内容写入完成后登记
ContentVersion - 创建或绑定
ContentAsset - 在
Workspace中创建WorkspaceNode
8.4 文件操作流程
- 用户选择目标节点
- 工作空间模块校验所有权和路径规则
- 执行重命名、移动、复制或删除
- 如为复制,仅复制逻辑节点,不复制内容版本
8.5 删除与恢复流程
- 删除动作只改变
WorkspaceNode.lifecycleState - 被删除节点进入回收区
- 恢复时校验路径冲突和配额
- 真正的物理清理由保留策略驱动
8.6 分享流程
- 用户选择一个文件节点创建
ShareGrant - 系统记录分享访问策略
- 访客通过分享入口访问
- 系统按口令、期限、额度和动作权限进行授权判断
- 允许时执行下载或导入
8.7 快传流程
在线快传
- 创建
TransferSession(mode=ONLINE) - 接收方加入
- 完成信令交换
- 传输完成或会话过期
离线快传
- 创建
TransferSession(mode=OFFLINE) - 写入
TransferItem清单 - 上传离线内容
- 全部完成后进入可接收状态
- 接收方下载或导入
8.8 异步处理流程
- 主流程触发
AsyncJob - Worker 认领任务
- 执行中上报租约和进度
- 成功、失败、重试或取消
8.9 存储迁移流程
- 创建迁移批次
- 读取符合条件的
ContentVersion - 复制到目标存储策略
- 切换引用
- 清理旧内容对象
9. 统一业务规则
9.1 身份规则
- 账号必须有明确状态
- 被停用账号不得继续生成有效会话
- 一个客户端类型同一时刻只能有一个活跃会话
- 会话失效必须是统一规则,而不是接口局部处理
9.2 工作空间规则
- 所有文件和目录都必须存在于某个
Workspace WorkspaceNode的路径语义由父子关系决定,不允许把完整路径字符串当作唯一真相- 同一父节点下名称必须唯一
- 文件复制复制的是节点,不是内容版本
9.3 内容规则
- 内容版本写入完成后不可变
- 逻辑节点与物理内容必须解耦
- 派生产物属于内容资产域,不属于工作空间域
- 物理对象删除必须晚于业务生命周期结束
9.4 删除与保留规则
- 删除是进入回收区,不是直接物理删除
- 恢复必须回到原有工作空间语义下
- 物理清理只能由保留策略和引用关系共同决定
9.5 分享规则
- 分享是对单一目标节点的授权对象
- 分享权限必须显式区分查看、下载、导入
- 分享过期、额度耗尽、被撤销后必须立即失效
- 公开访问规则必须只由分享模块负责
9.6 传输规则
- 分享与快传是两个独立能力,不允许语义混用
- 在线快传是临时连接能力,不承担长期存储责任
- 离线快传是临时托管能力,不等于工作空间文件
- 导入动作必须显式把传输内容转化为工作空间资产
9.7 上传规则
- 上传能力由服务器根据存储策略决定
- 客户端只能消费上传策略,不自行定义上传模式
- 上传完成之前不得产生正式工作空间节点
9.8 任务规则
- 所有长耗时业务必须通过
AsyncJob进入统一任务体系 - 相同语义的自动任务必须具备幂等键
- 任务状态机必须统一
9.9 管理规则
- 所有管理写操作必须具备审计能力
- 管理能力应基于角色和权限模型,不基于用户名白名单硬编码
- 系统设置必须区分可变业务配置和只读运行快照
10. 状态定义与状态流转
10.1 AccountStatus
状态:
PENDINGACTIVESUSPENDEDCLOSED
流转:
PENDING -> ACTIVEACTIVE -> SUSPENDEDSUSPENDED -> ACTIVEACTIVE/SUSPENDED -> CLOSED
10.2 SessionStatus
状态:
ACTIVEREVOKEDEXPIRED
流转:
ACTIVE -> REVOKEDACTIVE -> EXPIRED
10.3 WorkspaceNodeLifecycleState
状态:
ACTIVERECYCLEDPURGED
流转:
ACTIVE -> RECYCLEDRECYCLED -> ACTIVERECYCLED -> PURGED
10.4 ContentVersionState
状态:
PENDING_UPLOADAVAILABLEARCHIVEDDELETED
流转:
PENDING_UPLOAD -> AVAILABLEAVAILABLE -> ARCHIVEDARCHIVED -> DELETED
10.5 ShareGrantStatus
状态:
ACTIVELOCKEDEXHAUSTEDEXPIREDREVOKED
流转:
ACTIVE -> LOCKEDACTIVE -> EXHAUSTEDACTIVE -> EXPIREDACTIVE/LOCKED -> REVOKED
10.6 TransferSessionStatus
状态:
CREATEDAWAITING_UPLOADREADYIN_PROGRESSCOMPLETEDEXPIREDCANCELLED
流转:
- 在线快传:
CREATED -> IN_PROGRESS -> COMPLETED/EXPIRED/CANCELLED - 离线快传:
CREATED -> AWAITING_UPLOAD -> READY -> COMPLETED/EXPIRED/CANCELLED
10.7 AsyncJobStatus
状态:
QUEUEDRUNNINGRETRY_WAITINGSUCCEEDEDFAILEDCANCELLED
流转:
QUEUED -> RUNNINGRUNNING -> SUCCEEDEDRUNNING -> RETRY_WAITINGRETRY_WAITING -> RUNNINGRUNNING/RETRY_WAITING -> FAILEDQUEUED/RUNNING/RETRY_WAITING -> CANCELLED
11. 权限模型
目标态采用三层授权模型:
11.1 第一层:身份层
回答:
- 用户是谁
- 是否已登录
- 会话是否有效
11.2 第二层:角色层
回答:
- 用户具有什么系统级能力
例如:
MEMBEROPERATORADMIN
11.3 第三层:资源层
回答:
- 用户是否可以对某个具体资源执行某个动作
资源授权判断必须同时考虑:
- 资源所有权
- 资源状态
- 角色权限
- 动作策略
11.4 授权规则
- 公开资源只允许暴露明确可公开的动作
- 所有者默认拥有自己资源的成员级权限
- 管理角色拥有治理权限,但不应破坏审计边界
- 导入、删除、恢复、迁移都属于高风险动作,必须有明确授权检查
12. 企业级目标模块结构
目标态后端应围绕业务域而不是技术层进行组织,建议演进为以下模块边界:
identity-accessworkspacecontent-assetsharingtransferasync-jobstorage-governanceoperations-admincommon-kernel
每个模块内部再区分:
- domain
- application
- infra
- api
前端也应围绕业务域组织,而不是单纯围绕页面散落:
- account
- workspace
- sharing
- transfer
- admin
- common
13. 统一架构结论
目标态架构的核心不是“把当前代码整理得更漂亮”,而是把系统重构成以下稳定形态:
- 账号、会话、角色、授权是独立的身份域
- 工作空间节点与物理内容版本彻底分离
- 分享与快传是两个独立分发域
- 上传只是内容接入机制,不直接等同于业务文件创建
- 后台任务是统一异步处理底座
- 存储策略是系统级治理能力,不是控制器附属逻辑
- 管理端是治理入口,不是绕过业务规则的特殊通道
后续所有重构都应围绕上述七条进行对齐。
14. 规则判定矩阵
本矩阵用于明确“某类规则到底由哪个业务域负责判定”,避免后续继续把同一规则散落在多个模块中。
| 规则类别 | 判定主体 | 触发时机 | 输出结果 | 不应由谁判定 |
|---|---|---|---|---|
| 是否允许注册 | identity-access |
用户提交注册请求时 | 允许注册 / 拒绝注册 | 页面层、管理台聚合层 |
| 邀请码是否有效 | identity-access |
注册前 | 有效 / 无效 / 已消费 | Controller 私有分支 |
| 会话是否有效 | identity-access |
每次受保护请求进入时 | 允许访问 / 拒绝访问 | 业务 Service 各自重复判断 |
| 用户是否具备系统管理能力 | identity-access |
访问管理能力前 | OPERATOR / ADMIN 是否可执行 |
用户名白名单硬编码 |
| 用户是否可操作某个工作空间节点 | workspace + 授权层 |
文件相关动作前 | 允许 / 拒绝 | Controller 层手写所有权判断 |
| 路径是否合法 | workspace |
创建、移动、复制、恢复前 | 合法 / 非法 | 上传模块重复实现 |
| 同目录是否允许重名 | workspace |
节点写入前 | 允许 / 拒绝 | 分享模块、传输模块各自决定 |
| 是否允许创建正式文件节点 | workspace |
内容接入完成后 | 创建 / 拒绝 | 上传接入层直接决定 |
| 内容版本是否可复用 | content-asset |
导入、复制、分享导入时 | 复用 / 新建版本 | 工作空间模块 |
| 是否允许物理删除对象 | content-asset |
清理流程中 | 删除 / 保留 | 工作空间模块直接删除对象 |
| 上传模式如何选择 | storage-governance |
创建上传会话时 | PROXY / DIRECT_SINGLE / DIRECT_MULTIPART |
前端、自定义工具类 |
| 上传大小是否超限 | storage-governance + identity-access |
上传前 | 允许 / 拒绝 | FileService 和 UploadSessionService 各自重复算 |
| 分享是否允许访问 | sharing |
访问分享链接时 | 允许查看 / 拒绝查看 | 工作空间模块 |
| 分享是否允许下载 | sharing |
下载分享文件时 | 允许下载 / 拒绝下载 | Controller 查询参数分支 |
| 分享是否允许导入 | sharing |
导入分享文件时 | 允许导入 / 拒绝导入 | 工作空间模块 |
| 分享是否过期或额度耗尽 | sharing |
每次分享动作前 | 可用 / 不可用 | 前端缓存判断 |
| 传输会话是否允许加入 | transfer |
加入在线快传时 | 允许加入 / 拒绝加入 | 信令基础设施 |
| 离线传输是否可接收 | transfer |
下载/导入前 | 可接收 / 不可接收 | 文件接入层 |
| 离线传输是否超出全局容量 | transfer + storage-governance |
离线上传前 | 允许上传 / 拒绝上传 | 管理指标聚合层 |
| 是否需要进入异步任务 | async-job 的调用方域 |
长耗时动作提交时 | 直接处理 / 创建任务 | Controller 层直接排队 |
| 任务是否允许重试 | async-job |
任务失败后 | 自动重试 / 人工重试 / 不可重试 | 具体任务 handler 自己决定 |
| 任务是否重复 | async-job |
创建任务时 | 新建 / 幂等忽略 | broker 消费者临时判断 |
| 设置是否允许修改 | operations-admin + 授权层 |
管理写操作时 | 可写 / 只读 | 聚合 DTO 提示字段单独决定 |
14.1 矩阵使用规则
- 所有新业务规则必须先映射到矩阵中的一个判定主体。
- 如果某条规则找不到唯一判定主体,说明领域边界还没有收敛。
- 同一规则只能有一个“最终判定主体”,其他模块只能消费判定结果,不能复制规则。
15. 高风险测试场景清单
本清单不是为了堆测试数量,而是定义目标架构下必须被自动化约束的关键业务场景。
15.1 身份与授权
- 同一客户端类型再次登录后,旧会话失效
- 桌面端与移动端会话可并存,但互不覆盖
- 改密后所有活跃会话和 refresh token 失效
- 账号被停用后无法继续访问受保护资源
OPERATOR与ADMIN的授权边界按统一角色模型生效
15.2 工作空间
- 同一父节点下禁止重名文件或目录
- 目录不能移动到自身或自身子树
- 目录不能复制到自身或自身子树
- 删除进入回收区而不是立即物理删除
- 恢复时如果原位置冲突则整体拒绝恢复
- 恢复时如果超出配额则整体拒绝恢复
15.3 内容资产
- 复制逻辑节点时不复制物理内容版本
- 多个逻辑节点绑定同一内容版本时,删除其中一个不会删除物理对象
- 最后一个逻辑引用消失后,物理对象才允许清理
- 内容版本一旦
AVAILABLE后不可变
15.4 上传与存储治理
- 上传模式严格由存储策略能力决定
- 非法路径、非法名称、超大小、超配额都会被统一拒绝
- 已完成、已取消、已失败、已过期的上传会话不能继续写入
- 分片上传必须完整记录分片后才能完成
- 上传完成前不创建正式工作空间节点
15.5 分享
- 有口令的分享必须先验密
- 过期分享不可查看、不可下载、不可导入
allowDownload与allowImport必须分别生效- 分享额度耗尽后所有授权动作失效
- 分享被撤销后立即失效
15.6 快传
- 在线快传只允许有效接收方进入会话
- 离线快传只有全部文件上传完成后才可接收
- 匿名可接收,但不可导入到工作空间
- 离线传输容量达到上限时拒绝继续上传
- 过期传输会话不可继续接收或导入
15.7 异步任务
- 相同业务语义的自动任务不会重复创建
- 任务租约过期后能够安全回收
- retryable 失败会进入统一重试流程
- non-retryable 失败进入终态
- 只有允许人工重试的任务才能被人工重试
15.8 管理与治理
- 只读系统快照不可通过写接口修改
- 可写业务设置必须经过统一管理授权
- 高风险治理动作必须产生审计记录
- 存储迁移只能在合法策略组合下执行
16. 重构迁移与模块落地顺序
本顺序定义的是目标架构的落地路径,不是一次性重写方案。
16.1 第一阶段:身份与授权先行
目标:
- 统一角色模型
- 统一会话失效规则
- 统一管理权限事实源
优先原因:
- 如果权限模型不先收敛,后续所有模块重构都会继续携带错误边界
落地模块:
identity-accessoperations-admin中与授权入口直接相关的部分
16.2 第二阶段:工作空间与内容资产拆分
目标:
- 把逻辑节点与物理内容彻底拆开
优先原因:
- 这是后续分享、快传、上传、删除、恢复、迁移的共同基础
落地模块:
workspacecontent-asset
16.3 第三阶段:上传与存储治理收口
目标:
- 让上传成为内容接入能力
- 让存储策略成为系统级能力
优先原因:
- 当前上传规则和文件业务耦合过深,不先切开,内容资产域无法稳定
落地模块:
storage-governancecontent-asset接入层
16.4 第四阶段:分享域收口
目标:
- 统一旧分享和新分享
- 让分享只围绕
ShareGrant和逻辑节点授权
优先原因:
- 分享对外暴露面大,必须建立在稳定工作空间与内容模型之上
落地模块:
sharing
16.5 第五阶段:快传域拆分
目标:
- 分开在线快传与离线快传
- 明确临时传输与正式工作空间资产的边界
优先原因:
- 快传与分享的边界只有在工作空间与分享域稳定后才容易落定
落地模块:
transfer
16.6 第六阶段:异步任务统一底座
目标:
- 让
AsyncJob成为跨域底座
优先原因:
- 当工作空间、内容资产、分享、快传都稳定后,异步任务才可以真正服务多个领域,而不是继续附属在文件模块里
落地模块:
async-job
16.7 第七阶段:管理域治理化
目标:
- 管理端只做治理编排
- 业务规则回归各自领域
优先原因:
- 管理端必须建立在稳定的领域边界之上,否则只会继续膨胀为超级入口
落地模块:
operations-admin
16.8 第八阶段:前端按领域重组
目标:
- 前端与后端围绕同一业务域组织
优先原因:
- 前端结构必须跟随稳定后的后端领域,而不是反向牵引后端设计
落地模块:
accountworkspacesharingtransferadmincommon
16.9 模块落地顺序总表
identity-accessworkspacecontent-assetstorage-governancesharingtransferasync-joboperations-admin- 前端领域化重组
16.10 落地顺序约束
- 未统一身份与授权前,不进入大规模治理侧重构
- 未拆开工作空间与内容资产前,不收口分享和快传
- 未收口上传与存储治理前,不把内容资产域视为稳定
- 未稳定后端领域边界前,不开始前端大规模域化重组