我有一个Android应用程序,它与Irc服务器交互,我试图使用MVP模型。有视图层(Activity
,Fragments
)。一个模型层,由一堆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());
}
});
}
我的问题是在哪里触发由另一个事件触发的此类操作(在这种情况下是加入频道的成功)。
答案 0 :(得分:1)
我认为你是对的。
如果您感觉更舒适,请为这些回调创建类型和实例。这使我的代码更清晰。
如果你对“干净的建筑”感兴趣(正如我强烈建议的那样),请看一下prezi I did for a workshop(这个工作坊是针对Android的初学者,它有70%的练习,所以你不会找到这么多代码。)
其他非常有趣的参考资料:
好implementation sample。抱歉,因为有西班牙语。也许Googlr Translate可以帮到你。代码是英文的,是一个非常有用的样本。