知识卡片
数据流会随系统复杂化持续分裂,高低层策略的拆分要视场景而定
内容
[[HuntTheWumpus案例从三组件模型到多API边界GameRules成为最高层策略]]里两路数据流最终汇聚到GameRules,但不代表数据流永远只会汇聚成一个组件——如果游戏要支持多人联网对战,就得再加一个网络组件,形成第三条同样由GameRules控制的数据流;系统越复杂,组件在架构里自然会分裂出越多数据流。分裂还可能出现在同一个组件内部:Hunt the Wumpus的GameRules组件其实包含两组不同层次的业务逻辑——一组负责玩家在洞穴地图中的移动(MoveManagement,需要知道洞穴如何相连、每个洞穴有什么、如何触发事件),另一组是更高层的策略,负责管理玩家的血量和每个事件的后果(PlayerManagement)——低层的移动逻辑向高层策略传递FoundFood、FellInPit这类事件,高层策略据此管理玩家状态、最终决定游戏输赢。这两组逻辑是否该被切开、设计一个API作为架构边界,答案取决于场景:在单机版本里,也许没必要为它们单独设计边界;但如果游戏要升级成面向海量玩家的联网版本,MoveManagement交给玩家本地计算机处理、PlayerManagement交给服务端处理(并以微服务API的形式为所有MoveManagement实例提供服务),MoveManagement和PlayerManagement之间就必须有一条完整的系统架构边界——因为此时两者已经分处不同机器、通过网络通信,而不再只是同一进程内的两个逻辑分组。
参考来源
- 位置:《架构整洁之道》第25章《层次与边界》"交汇数据流""数据流的分割"(源文件:_epub-src/text/part0014_split_010.html)
- 结论依据:原文用增加网络组件产生第三条数据流的例子说明系统复杂化会持续分裂数据流,并用GameRules内部MoveManagement/PlayerManagement高低层策略拆分、以及联网多玩家场景下两者需要完整架构边界的例子,说明边界需求取决于具体场景,直接支撑本卡片结论。
- 原始内容:随着系统的复杂化,组件在架构中自然会分裂出多条数据流来……游戏的低层策略会负责向高层策略传递事件……MoveManagement 组合是由玩家的本地计算机来处理的。而PlayerManagement组件则由服务端来处理……MoveMangament与PlayerManagment之间存在一个完整的系统架构边界。