python tortoise-orm
2026/5/3 20:52:29
在决定从业务边界开始拆系统之后,我很快遇到了一个非常具体的问题。
这个问题不是“模块怎么拆”,
而是:
某些逻辑,到底该不该跨过模块边界?
这个问题如果不先想清楚,
后面的设计会非常难受。
在设计商品和订单相关逻辑时,我一开始是犹豫的。
比如:
这些问题,从功能角度看都说得通。
如果只是为了把流程跑通,
让订单模块“顺手”去操作商品模块,
是最省事的。
但我很快意识到一个风险:
一旦这么做,商品和订单的职责就会开始混在一起。
如果让订单模块:
那意味着一件事:
订单模块开始对“商品内部实现”负责了。
这在当前阶段可能没问题,
但我很清楚后面会发生什么:
一旦订单对商品内部有了改动,
后面任何变化,都会牵一发动全身。
正是在这个地方,我给系统立下了第一条硬边界:
一个模块,只能依赖另一个模块“公开承诺的接口结果”,
不能依赖它的内部过程。
落到这个例子里,就是:
这条边界一旦立住,
很多“顺手的实现”就必须被放弃。
比如:
这些做法在短期内,确实会让实现更麻烦一点。
但它换来的是:
回头看,我之所以把它当成第一条不能越过的边界,原因很简单:
这是我第一次在设计阶段,就明确拒绝了“省事实现”。
如果在这个地方妥协,
后面类似的跨边界需求只会越来越多。
而这条边界一旦立住,
后面的设计反而变得轻松了:
我给这套系统划的第一条“不能越过”的边界,
并不是抽象原则,而是一个非常具体的决定:
订单不能依赖商品的内部实现,
商品也不能被订单流程牵着走。
这条边界看起来很普通,
但如果一开始没立住,
后面整个系统都会被它反复拉扯。
也正是从这一刻开始,
我才真正意识到:
系统设计里的边界,往往不是画出来的,
而是在具体场景里,被逼着做出来的。