0

我的 c++ SOA 应用程序有一个“会话”概念,用于在服务之间交换数据。例如,它用于在执行提交或回滚更改的会话 B 之前检查某些服务 A 操作的合法性。任何。

我有 2 种会话模式:正常和假设。更进一步,我有不同的会话,合法性会话,分配会话,提交会话等。这是一个主要问题。合法性会话可以是假设或真实等。

如何解决这个问题并避免代码重复?

我可以制作一个ISessionFactory接口并让WhatIfFactoryRealFactory实现它。然后我可以制作一个ILegalitySession并让WhatIfLegalitySessionRealLegalitySession实现它。然后我的工厂将返回适当的对象。

它有两个主要问题。如果新模式来了怎么办?我将不得不为所有会话实施新工厂和新课程!如果出现新的会话类型怎么办?我必须改变两个工厂...

也许从 2 个层次结构中辞职并让 whatIf 会话“装饰”真实会话?如何本地化更改?

4

2 回答 2

1

尝试使用装饰器实现您的 WhatIf。或者将一些“假设”特定部分提取到某种策略中。

另一种选择是使用状态模式。“WhatIf”状态和“Real”状态。

于 2009-05-01T17:44:55.060 回答
0

我认为装饰器模式在这里很有意义。您可能还想查看策略模式及其编译时表亲,基于策略的设计。如果没有更多信息,很难说哪个最好。装饰器非常适合添加其他行为,另外两个用于更改现有行为。

于 2009-05-01T20:03:39.190 回答