客户端与服务器需执行用例时,Clean Architecture的应用与方案探讨
问题解答
1. Clean Architecture 是否依然适用?
完全适用。Clean Architecture的核心是依赖倒置和分层隔离,刚好能适配这种客户端、服务器端都要跑业务逻辑的场景:
- 它把核心业务规则(实体、用例)和外部依赖(客户端UI、服务器存储、网络)彻底解耦,不管逻辑跑在客户端还是服务器,核心业务逻辑都能直接复用。
- 离线模式、本地CPU密集型任务这类场景,本质就是业务逻辑的执行环境不同而已。Clean Architecture的分层设计允许你在不同环境(客户端/服务端)实现对应的基础设施层(比如本地存储、远程API),核心应用层的逻辑完全不用改。
- 就像你提到的PDF标注、本地文档搜索,这些业务逻辑都可以放在用例层,客户端和服务器端各自实现对应的存储、文件处理等基础设施适配层就行。
2. 扩展Command/Query Bus 实现跨端请求委派是否可行?
当然可行,这是非常合理的扩展方向,尤其匹配你描述的场景:
- 你可以给每个Command/Query加一个执行目标标识(比如
Client或Server),总线根据这个标识决定是在本地执行,还是把请求发往服务器处理。 - 对应你的两个示例:
- 示例1:PDF标注和图表建模的Command直接标记为
Client,总线调用客户端的处理程序完成本地操作,之后再触发一个标记为Server的上传Command,把结果同步到服务器。 - 示例2:文本搜索Query可以做个逻辑判断,检测到离线时自动把执行目标切换为
Client,调用本地搜索处理程序;网络恢复后,再根据需求切换回远程搜索或者把本地数据同步到服务器。
- 示例1:PDF标注和图表建模的Command直接标记为
- 要注意几个细节:
- 确保Command/Query的核心定义在两端保持一致,别出现业务规则不一致的情况。
- 提前处理跨端执行的一致性问题,比如本地操作后同步到服务器时的冲突解决逻辑,要在应用层就定义好。
- 客户端的Command/Query Bus得做好本地任务队列,离线时把需要同步到服务器的请求暂存起来,等网络恢复后批量处理。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

