首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计问题:当多个操作需要时,从单个操作或Manager调用服务

设计问题:当多个操作需要时,从单个操作或Manager调用服务
EN

Stack Overflow用户
提问于 2012-07-16 09:02:51
回答 1查看 39关注 0票数 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. 从WX3调用公共服务调用(WX4,MngrY ),并从单个组件单独调用。设计得好吗?
  2. 从Manager MngrY打所有的服务电话。它会扩大吗?将来我们可能不得不提出大量的服务请求,我们为了其他模块而阻塞每个模块,并且设计明智,使MnagrY知道每个模块的需求。
  3. 根据需要从单个组件(根据需要)进行所有服务调用,并通过缓存使包装器处理重复请求。如果没有进行两个调用,那么依赖缓存好吗?服务必须在几毫秒内返回结果,并且不能总是进行两次调用。
  4. 或者我们应该有一个缓存机制在WX1,WX2,WX3,.确保相同的呼叫不会发生两次。

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

EN

回答 1

Stack Overflow用户

发布于 2012-07-16 10:02:09

嗯..。

在那些必须执行复杂且变化的操作序列的情况下,我通常使用带有某种“请求/命令/结果”类的状态机来调用它,例如,“OpClass”。管理器装入类的一个实例,其中包含定义A、B或C操作、数据、命令枚举、链接、其他类实例和整批所需的一切。通过这种方式,OpClass实例拥有按照正确顺序执行必要的X1..X5操作所需的所有状态和其他信息(如果顺序重要的话),并确保操作不被不必要地重复--封装了A、B或C。然后向A、B或C发出OpClass,这些代理可以根据需要调用X1..X5以完成所请求的操作。OpClass应该包含用于存储任何结果和错误报告的成员,例如。用于错误消息和/或异常对象的字符串,因此,如果某些地方出错了,并且包含了记录错误或稍后重试所需的所有信息,则操作可以返回“早期”。

TBH,我可能也会将A,B聚合到OpClass中,因此形成一种“超级”OpClass,它只需要加载数据和命令,然后提供执行,例如。通过一个run()方法。稍后移动到具有队列、线程和/或线程池的并行操作,然后变得简单得多,实际上几乎是琐碎的:)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11501071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档