事件真的会使代码分离吗?

mar*_*nas 3 c#

所以我试图使用事件来解耦我的代码,这是我的问题:

class WorldHandler
{
    public void Notify(object sender, EventArgs e)
    {
        if (e is CameraMovedEventArgs)
        {
            // handle event
        }

        if (e is MapLoaded)
        {
            // handle event
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

WorldHandler类侦听我的应用程序的不同子系统.这是不是意味着WorldHandler仍然与其他子系统耦合?直接访问这个类中的子系统不是一样的吗?

如果我很难理解我的要求,我会在帖子中添加其他信息.

我对此问题进行了研究,但我仍然觉得这很令人困惑,因为不同的人对如何将代码与事件分离有不同的看法.

slu*_*ter 5

是的,您的代码仍然是耦合的,您不仅可以直接引用该类(当您挂接事件处理程序时),而且您还可以引用包含正在监视的类的程序集.

您可以通过使用监视类上的接口并仅通过接口上公开的项访问它来最小化耦合.理想情况下,这个界面应该是观察者和watchee参考的第三个"更常见"的组件.您还可以通过使用Prism中EventAggregator之类的东西来最小化或消除事件耦合.

耦合本身并不坏,它简单地使得更换实现并替换它们变得更加困难(或者更昂贵) - 如果没有适当的解耦,则会有更多的工作和更多的错误风险.您的应用程序可能不需要正确的解耦 - 这取决于您打算如何处理它.