讨厌的EventBus

前任留下的代码,大量使用了EventBus,注释很少,我非常头疼。

1、难以追踪

举个例子,类 A 使用 B 进行延时操作,A -> EventC -> B -> EventD -> A。

类 A 使用 B 却不需要依赖 B,这样我要修改 B,却不知道 A 有用到 B,那就可能出现 BUG。

退一步说,我可以通过事件 EventC 知道 A 与 B 有所关联,但可能还有 A1、A2、B1、B2 一大堆的类依赖了 EventC。

得了,现在我只能全局搜“post(C)”找出那些事件发起者,然后把它们一个一个记起来,“哦,原来是A、A1、A2”,然后再全局搜“(EventC”,记起来那些事件接受者,“哦,原来是B、B1、B2”。

然后我还要运行起来,给B上断点,看看实际是哪个A调用了我要修改的 B。而不是我没修改的 B1、B2 。

然而还不行,B切换了线程,现在我只能在 3个A中全打断点,看看是谁发起事件的。

最后呢,EventD 不仅被 A 接受,还被 A1、A2 接受,现在我还得注意,实际使用时会不会被A1、A2所影响。

回顾一下,为了追踪一个调用,我需要 全局搜+记起来+全局搜+记起来+断点运行一遍。而如果不用EventBus。我只需要按着 Ctrl 点进去就追踪到了。别提多难受了。

2、事件分化严重

实际上我希望代码调用流程是这样的(一目了然):

public void start() {
    createDog((dog) -> {
        touchDog(dog);
        removeDog(dog);
    });
}

而EventBus是这样的:

public void start() {
    createDog();
}

private void createDog() {
    EventBus.getDefault().post(new Dog);
}

@Subscribe()
public void createDogSucceed(Dog dog) {
    touchDog(dog);
    removeDog(dog);
}

我需要追踪到 createDog 这个实现类中,才知道它是如何回调的。上述只分了两块,若果分块更多,一个一个找起来麻烦死。


猜你喜欢

转载自blog.csdn.net/qq_34224268/article/details/80513533