0

我有一个执行 A、B、C 的操作列表(这个列表可以增长),它执行完全不同的操作。这些操作中的每一个都由单独的 java 类执行。有一个经理 MngrY,他坐在最上面,叫 A、B、C

执行操作 (A,B,C) 的类需要调用不同的服务 X1,X2,X3,X4,X5 来达到目的。我们有用于调用服务的包装类 WX1、WX2、WX3、WX4、WX5。我们从 A、B、C 进行的一些调用很常见(比如 WX3、WX4)。(可能是 A、B、C 中的两个或其中三个)。

现在我们应该从哪里调用 X1,X2,X3,X4,X5。理想情况下,A、B、C 中的每一个都应该调用所需的服务。但是对于在所有 A、B、C 中共享的那些,从 MngrY 调用并将服务调用的输出发送到 A、B、C 中的每一个是否有意义(这在效率方面是有意义的,但在设计方面是明智的,因为 MngrY 应该不知道 A、B、C 的运作方式)。

所以选项是

  1. 从 MngrY 调用公共服务调用(WX3,WX4),这些调用是单个组件单独需要的。是好的设计吗?

  2. 由经理 MngrY 拨打所有服务电话。它会扩大规模吗?将来我们可能不得不提出很多服务请求,并且为了其他人的利益而阻止每个模块,并且设计明智,使 MnagrY 了解每个模块的需求。

  3. 根据需要从单个组件(根据需要)进行所有服务调用,并通过缓存使包装器处理重复请求。依靠缓存不进行两次调用是否很好?服务必须在几毫秒内返回结果,并且不能总是进行两次调用。

  4. 或者我们应该在 WX1,WX2,WX3,... 中有一个缓存机制,以确保相同的调用不会重复两次。

同样在将来,我们可能希望从 MngrY 并行调用 A、B、C,因此在这种情况下,缓存可能会产生问题。因为同一个请求可能不止一次。

4

1 回答 1

0

唔...

在必须执行复杂且变化的操作序列的情况下,我通常求助于具有某种“请求/命令/结果”类的状态机,称之为“OpClass”。管理器加载类的实例,其中包含定义 A、B 或 C 操作、数据、命令枚举、链接、其他类实例所需的一切。通过这种方式,OpClass 实例具有以正确的顺序执行必要的 X1..X5 操作所需的所有状态和其他信息(如果顺序很重要),并确保操作不会不必要地重复 - A、B或 C 被封装。然后将 OpClass 发布给 A、B 或 C,这些代理可以根据需要调用 X1..X5 以完成请求的操作。OpClass 应该包含用于存储任何结果和错误报告的成员,例如。

TBH,我可能也会将 A、BC 聚合到 OpClass 中,因此形成一种“超级” OpClass,只需要加载数据和命令,然后提供执行,例如。通过 run() 方法。稍后移动到队列、线程和/或线程池的并行操作然后变得更简单,实际上接近于微不足道:)

这是相关的还是有意义的?

于 2012-07-16T10:02:09.817 回答