MVP模型 - 在何处调用由其他事件而非用户触发的事件(查看)

时间:2015-07-07 05:21:41

标签: android mvvm architecture mvp

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

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

但有些情况不需要用户互动。例如,如果用户想要加入irc频道,他会触发由JoinChannelUseCase执行的呼叫,然后回调返回到ChannelPresenter该频道的用户列表。我获取此用户列表并在列表中搜索特定用户并对该用户执行操作。此操作不是由用户触发的,因此不需要来自视图。但我不知道确切地放置此代码的位置。如果我在Join方法回调中放入ChannelPresenter,那看起来很奇怪。下面是ChannelPresenter类的snipet,可以更好地解释它。

ChanelPresenter snipet:

@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());
        }
    });
}

我的问题是在哪里触发由另一个事件触发的此类操作(在这种情况下是加入频道的成功)。

1 个答案:

答案 0 :(得分:1)

我认为你是对的。

如果您感觉更舒适,请为这些回调创建类型和实例。这使我的代码更清晰。

如果你对“干净的建筑”感兴趣(正如我强烈建议的那样),请看一下prezi I did for a workshop(这个工作坊是针对Android的初学者,它有70%的练习,所以你不会找到这么多代码。)

其他非常有趣的参考资料:

您在good theory

implementation sample。抱歉,因为有西班牙语。也许Googlr Translate可以帮到你。代码是英文的,是一个非常有用的样本。