知识卡片

门面不应参与子系统内部业务逻辑

普通读书笔记卡 · 1856.a.5

内容

常见误区是让[[门面模式的定义与两个角色]]中的Facade直接组合多个子系统方法调用实现复杂 业务逻辑,这会埋下”倒依赖”隐患——子系统必须依赖门面才能正确使用,违反单一职责且破坏 封装性。正确做法是在子系统内部新建Context类封装业务规则,门面只委托给它。发散:这把 “门面该多稳定”和”业务逻辑该多灵活”分离到不同层,是”稳定层与易变层分离”思路的具体示范。

参考来源

- 位置:《设计模式之禅(第2版)》第23章《门面模式》(源文件:_epub-src/text/part0107.html) - 结论依据:原文指出门面参与业务逻辑组合会"产生一个倒依赖的问题:子系统必须依赖门面才能被访问……不仅违反了单一职责原则,同时也破坏了系统的封装性",并给出建立Context封装类承载复杂业务规则、门面只做委托的修正方案。 - 原始内容:因为你已经让门面对象参与了业务逻辑,门面对象只是提供一个访问子系统的一个路径而已,它不应该也不能参与具体的业务逻辑,否则就会产生一个倒依赖的问题……在门面模式中,门面角色应该是稳定,它不应该经常变化……业务逻辑是会经常变化的,我们已经把它的变化封装在子系统内部。