我有一个执行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是如何操作的,所以在设计上是明智的)。
所以选择是
另外,将来我们可能希望从MngrY中并行调用A、B、C,这样在这种情况下缓存就会产生问题。同样的请求可能不止一次。
发布于 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()方法。稍后移动到具有队列、线程和/或线程池的并行操作,然后变得简单得多,实际上几乎是琐碎的:)
这是相关的还是有意义的?
https://stackoverflow.com/questions/11501071
复制相似问题