【问题标题】:Number of calls from Facade in Facade PatternFacade Pattern 中的 Facade 调用次数
【发布时间】:2011-10-27 06:46:03
【问题描述】:
我们正在“讨论”应该在外观层中放置什么以及外观层应该对底层进行多少次调用。
在我们的项目中,我们有一个协调对服务和数据库的调用的编排层。我们还有一个包含业务规则和计算的业务层。
我们的外观层具有安全检查、日志记录和错误处理功能。
现在的问题是:外观应该只有一次调用编排层还是可以多次调用。如果只是一次调用,应该将这些层合并为一个层。
这些是用 C# 编写的 WCF 服务。
【问题讨论】:
标签:
design-patterns
architecture
facade
【解决方案1】:
Facade 内的调用次数无关紧要,只要调用执行一个操作(在调用者的眼中)并且完全执行。
请记住,对调用者的单个操作可能包括日志记录、运行业务规则、打开与数据库的连接、写入数据库,然后最后关闭和清理连接。
【解决方案2】:
我支持贾斯汀的回答,我只添加一个考虑因素。如果您的编排层也处理业务层,并且您的外观最终成为与编排任务的一对一映射,那么您可以考虑将编排作为您的外观。但在这种情况下,您不会问,因此您的外观正在简化编排使用协议,或者编排和业务层是对等的。无论哪种情况,您都需要一个不同于编排模块的外观
【解决方案3】:
如果只是一次调用,这些层应该合并成一个层。
Facade 和 Orchestration 层是松耦合的吗?如果是这样,那么我的回答是“不”不要合并。仅从原则的角度来看,我认为松散耦合是有价值的,应该保留它。
Facade 应该只有一次调用编排层,还是可以多次调用。
当它发出多个调用时 - 它正在执行的操作与编排层正在执行的操作之间有什么区别。想想他们活着的理由。
但是,我允许区分纯粹的“业务”调用和“跨领域”调用。通过建立只允许一个“业务”调用“通过”Facade 的约定,您可以为业务服务保持一个干净的结构(永远不会有任何混淆);但另一方面,您在进行其他增强系统行为和功能的横切调用时在技术上不受限制。