《Clean Architecture》中的Reciprocal Polymorphic Boundary Interfaces是什么?
关于《Clean Architecture》中“Reciprocal Polymorphic Boundary Interfaces”的解释
在《Clean Architecture》第24章“部分边界”主题下,Uncle Bob提出的reciprocal polymorphic boundary interfaces(互逆多态边界接口),是对常规单方向多态边界接口的延伸,核心是让边界两侧的模块都通过自己定义的抽象接口与对方交互,彻底消除跨边界的具体依赖。
先对比常规多态边界接口
常规的多态边界接口是单向依赖:比如上层业务模块定义一个抽象接口(如OrderService),下层基础设施模块去实现这个接口。上层只依赖自己定义的抽象,不依赖下层的具体实现,以此完成边界隔离。
互逆多态边界接口的核心
而“互逆”的意思是,边界的两侧都各自定义自己需要依赖的抽象接口,由对方负责实现。也就是说:
- 模块X需要调用模块Y的能力时,X定义对应的抽象接口,由Y来适配实现;
- 同时,模块Y需要调用模块X的能力时,Y也定义对应的抽象接口,由X来适配实现;
两边都只依赖自己这边的抽象,完全不知道对方的具体类结构,彻底实现了双向的边界隔离。
举个简单场景
假设我们有订单业务模块(OrderModule)和支付模块(PaymentModule):
- 订单模块需要发起支付,于是定义
PaymentInitiator接口,支付模块实现这个接口; - 支付模块需要通知订单模块支付结果,于是定义
PaymentResultNotifier接口,订单模块实现这个接口;
两个模块之间没有任何直接的具体类依赖,都只依赖自己定义的抽象接口,任何一方的内部实现变更都不会影响另一方,完全符合Clean Architecture中边界隔离的核心原则。
Uncle Bob强调边界的作用是“将软件元素彼此分离,限制一侧的元素了解另一侧的元素”,互逆多态边界接口就是把这个原则贯彻到了双向交互的场景中,让边界两侧的独立性都得到保障。
内容的提问来源于stack exchange,提问作者vincentlabelle
相关产品推荐
相关产品推荐

