区分方法的两个入口点

  • 本文关键字:两个 入口 方法 c# events
  • 更新时间 :
  • 英文 :


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

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

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

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

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

如何区分1和2?

限制:- 修改接口 - 禁止- 向下投掷 - 禁止。

我看到的一个解决方案 - 是放置静态标志,它在调用 1'st 组件的Start()后立即下降。然而,这种方法破坏了封装,因为每次都应该在某些"外部"方法(例如在服务器的处理程序中)重新初始化标志,因此外部方法必须看到比接口中指定的内容更多的内容。此外,这隐含地暗示 Start() 仅由服务器调用,这在问题中无法保证。

还有什么想法吗?

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

提前谢谢。

据我所知,您的问题归结为"我有一个只有一个启动方法的接口,我如何在不添加任何其他内容的情况下判断它是否已经启动"。

答案让我印象深刻,你不能。你可以做的是总是扔IllegalOperationException不管它怎么称呼。然后在组件中捕获IllegalOperationException并传递(不执行任何操作)。在您的服务器方法中,您可以让它冒泡到更相关的位置。

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

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

最新更新