MVP 模型 - 在哪里调用由其他事件触发的事件而不是由用户触发的事件(视图)

MVP Model - Where to call events that are triggered from others events and not by the user (View)

我有一个 Android 应用程序与 Irc 服务器交互,我在其中尝试使用 MVP 模型。有视图层(ActivityFragments)。一个模型层,由一堆 Runnable 可执行文件 classes(称为 UseCases)组成,它们执行特定的操作并提供异步回调。大多数用例都是由用户从视图层启动的。

例如:用户触发Button连接服务器。然后它调用 Presenter,调用模型,returns 通过回调向 Presenter 成功或错误。然后 Presenter 通知 View。

但也有不需要用户交互的情况。例如,如果用户想加入一个 irc 频道,他会触发一个由 JoinChannelUseCase 执行的调用,然后回调 return 到 ChannelPresenter 该频道的用户列表。我得到这个用户列表并在列表中搜索特定用户并对这个用户执行操作。这个动作不是由用户触发的,所以它不需要来自视图。但我不知道把这段代码放在哪里。如果我在 Join 方法回调中输入 ChannelPresenter,它看起来很奇怪。下面是来自 ChannelPresenter class 的片段,可以更好地解释它。

ChanelPresenter 片段:

@Override
public void join(final String channel) {
    joinChannelUseCase.execute(channel, new JoinChannelUseCase.Callback() {
        @Override
        public void onSuccess(ChannelInfo channelInfo) {
            channelView.showChannelJoined(channelInfo.getChannelName() + channelInfo.getUsers().size());
            //call another use case acting in the list of users returned.
             // this code is to be here? 
        }

        @Override
        public void onFailure(Throwable t) {
            channelView.showChannelJoinError(t.getMessage());
        }
    });
}

我的问题是在哪里触发这种由另一个事件触发的操作(在本例中是成功加入频道)。

我认为你是对的。

如果您觉得更舒服,请为这些回调创建类型和实例。在我看来,这使代码更清晰。

如果您对“干净的架构”感兴趣(正如我强烈推荐的那样),请查看 prezi I did for a workshop(该研讨会面向 Android 的初学者,它有 70 % 的练习,所以你不会找到那么多代码)。

其他非常有趣的参考文献:

给你good theory

很好implementation sample。部分是西班牙文,也许Google翻译可以帮到你。