2012-07-16 49 views
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如何操作)。

所以选项是从MngrY和从单个组件单独要求

  1. 呼叫普通电话服务(WX3,WX4)。这是好的设计吗?

  2. 从Manager MngrY拨打所有服务电话。它会扩大吗?我们可能在将来需要大量的服务请求,并且为了其他人的需要而阻止每个模块,并且设计明智地让MnagrY知道每个模块的需求。

  3. 根据需要制定来自单个组件的所有服务调用(并根据需要),并通过缓存处理重复请求。依靠缓存来完成两个呼叫是不是很好?该服务必须在几毫秒内返回结果,并且不能总是进行两次呼叫。

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

此外,在未来我们可能会想打电话给A,B,C,从MngrY并行所以在这种情况下,可以将缓存创建一个问题。同样的请求可能会不止一次。

回答

0

嗯......

在必须进行复杂和操作的不同序列的情况下,我通常再打一个状态机带有某种“请求/命令/结果”类,通话它,比如'OpClass'。经理加载一个类的实例,其中包含定义A,B或C操作,数据,命令枚举,链接,其他类实例等等所需的一切。通过这种方式,OpClass实例拥有以正确的顺序执行必要的X1..X5操作所需的所有状态和其他信息(如果顺序很重要),并且确保操作不会不必要地重复--A,B或者C被封装。 OpClass然后被发布给A,B或C,并且这些代理可以根据需要调用X1..X5来完成请求的操作。 OpClass应包含用于存储任何结果和错误报告的成员,例如。一个用于错误消息和/或一个异常对象的字符串,因此,如果某些事情出现了问题并提供所有需要的信息,例如记录错误或稍后再试,就可以使操作返回“早期”。

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

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