区分方法的两个入口点

时间:2012-06-25 17:23:56

标签: c# events

有三个接口:IServer, IComponent, IClient.它们之间的连接是通过事件完成的。我写了分别实现它们的Server, Component, Client类。

组件之间可能存在依赖关系。也就是说,如果组件y依赖于x,则在调用x.Start()时 - 调用所有后代Start()。依赖项由AddDependency()中的IComponent方法创建。 (参见下面的源代码链接)。

客户端无法直接查看组件并使用事件通过服务器与它们进行交互。只有在服务器上注册了所有组件和客户端后,才能完成此操作。

问题: 方法Start()有2个入口点: 1:在Start()事件处理程序(第1个组件)中调用Server 2:Start()Component事件处理程序中调用(后代已启动)。

For 1:如果组件的状态已经Running - 抛出IllegalOperationException 对于2:如果后代已经Running - 什么都不做。

如何区分1和2?

限制: - 修改接口 - 禁止 - 向下倾斜 - 禁止。

我看到的一个解决方案 - 是静态标志,它在调用第1个组件的Start()后立即失效。然而,这种方法破坏了封装,因为每次在一些“外部”方法中(例如在服务器的处理程序中)应该重新初始化该标志,因此外部方法必须看到比接口中指定的更多的东西。此外,这隐含意味着Start()仅由Server调用,但在问题中无法保证。

还有什么想法?

来源: http://rghost.net/38868270

提前致谢。

1 个答案:

答案 0 :(得分:1)

据我所知,你的问题归结为“我有一个只有一个启动方法的界面,如何在没有添加任何其他内容的情况下判断它是否已经启动”。

答案让我觉得你做不到。无论如何调用,你所能做的就是抛出IllegalOperationException。然后在您的组件中捕获IllegalOperationException并传递(不执行任何操作)。在您的服务器方法中,您可以将其冒泡到更相关的位置。

据我所知,这是你给出限制的唯一选择。

注意:我没有查看任何代码,因为我不想从不值得信任的来源下载包含9个文件的zip文件(对你个人没有冒犯)。