【发布时间】:2016-02-25 20:25:51
【问题描述】:
我最近在阅读有关设计模式的文章,尤其是有关低耦合和委托的文章。
我想知道,Activity 类是否应该有任何逻辑,或者它是否只服务于视图。
例如我有一个名为BattleActivity 的活动,它应该作为两个玩家之间的某种会话。很多Push Notifications 发生在那里,而且这个类也作为Observer 工作,所以那里有很多交流。
现在我正试图弄清楚我可以将什么逻辑移动到一个单独的对象(以及我是否应该),然后只使用该活动。
我的活动方法之一示例:
private void postCastedSpell(final int spellId) {
Call call = StaticGlobalContainer.api.postSpellToBattle(Integer.parseInt(battleId), Integer.parseInt(MainActivity.CURRENT_USER_ID), spellId, 100);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Response<User> response, Retrofit retrofit) {
User user = response.body();
if (response.code() == 202) {
// 200
Log.i("Posting spell to battle", "Success");
Boolean affectedUserIsOpponent = isUserOpponent(user);
if (affectedUserIsOpponent && user.currentHp<1){
StaticGlobalContainer.battleOnResult(Constants.WON, getApplicationContext());
}else {
updateBattleLog(affectedUserIsOpponent, user, spellId);
}
// TODO: do something here
} else {
// 404 or the response cannot be converted to User.
Log.e("Posting spell to battle", "Error:" + response.errorBody());
}
}
@Override
public void onFailure(Throwable t) {
Log.i("HttpRequest-Post spell", "Failure");
}
});
}
【问题讨论】:
-
您正在涉足关于应用架构的高度评价领域,并且有很多方法可以满足您的要求,但没有一种方法比另一种更正确或更不正确。跨度>
-
在你的Activity中加入逻辑当然不是坏事。 Activity 仅用于运行应用程序的该部分,包括实例化视图、操作它们、处理用户输入等。作为开发人员,您的工作是确定一个类中有多少逻辑是太多逻辑。这基本上取决于您自己的个人喜好。如果您觉得某些任务可以分成单独的类,那就去做吧。否则,请在 Activity 本身中执行您需要的操作。
-
我希望有一个或两个正确的方法......无论如何,谢谢你对我的问题的轻微澄清:)
-
我同意道格的观点,这是一个非常自以为是的问题。实际上,您可能会发现,是的,您将在 Activity 中执行逻辑,而不管您实现了哪种 POSA 模式。需要有一些与活动相关的逻辑,多少?好吧,这取决于您的实施
-
谢谢大家的热心回复,很有道理。
标签: java android design-patterns