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