Java 活动类上是否应该有任何逻辑?

Java 活动类上是否应该有任何逻辑?,java,android,design-patterns,Java,Android,Design Patterns,我最近读了一些关于设计模式的书,特别是关于低耦合和委托的书 我想知道活动类是否应该有逻辑,或者它是否只服务于视图 例如,我有一个名为BattleActivity的活动,它被认为是两个玩家之间的某种会话。那里发生了大量的推送通知,同时该类也是一个观察者,因此那里有很多交流 现在我正试图弄清楚我可以移动到一个分离的对象(以及是否应该)然后只处理活动的逻辑 我的活动方法之一的示例: private void postCastedSpell(final int spellId) { Ca

我最近读了一些关于设计模式的书,特别是关于低耦合和委托的书

我想知道
活动
类是否应该有逻辑,或者它是否只服务于视图

例如,我有一个名为
BattleActivity
的活动,它被认为是两个玩家之间的某种会话。那里发生了大量的推送通知,同时该类也是一个观察者,因此那里有很多交流

现在我正试图弄清楚我可以移动到一个分离的对象(以及是否应该)然后只处理活动的逻辑

我的活动方法之一的示例:

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");
            }
        });
    }
private void postCastedSpell(最终整数拼写ID){
Call Call=StaticGlobalContainer.api.postSpellToBattle(Integer.parseInt(battleId),Integer.parseInt(MainActivity.CURRENT_USER_ID),spellId,100);
call.enqueue(新回调(){
@凌驾
公共响应(响应、改装){
User=response.body();
if(response.code()=202){
// 200
Log.i(“向战斗发布法术”,“成功”);
Boolean affectedUserIsOpponent=isUserOperator(用户);

if(affectedUserSoponent&&user.currentHp在活动中加入大量逻辑并不是特别不好,但您可以尝试将其保留为只查看相关内容。如果应用程序相对较小,则可能不值得删除逻辑。此外,还有一些

如果您的抽象没有提供显著的好处,您应该避免它们

我尝试将任何大数据对象保存在管理器类中,因此根据您的示例,创建一个
Battle
manager类来保存其中涉及的所有逻辑可能是值得的,比如
postCastedSpell
函数。这样一来,所有的战斗信息都是自包含的,也可以在其他活动中使用

请记住,如果您使用数据管理器类,并且希望它们与UI进行某种交互,则必须使用或,因为战地管理器无法访问您的UI。例如,要调用
postCastedSpell
,调用如下所示: 作战活动

BattleManager bm = BattleManager.getInstance(user1, user2);

onSpellClicked() {
   bm.castSpell(spellId, user1, callback)
}

BasicCallback callback = new BasicCallback() {
    @Override
    onComplete() {
        if (MyInfoFragment.this.isVisible()) {
            [Update UI]
        }
    }
};

注意:当像我的示例那样使用回调时,当它最终被调用时,该活动可能已经不在视图中,并且已经被垃圾收集。因此,在回调函数中,您需要首先确保它仍然可见,然后再尝试修改可能不再存在的UI。

这不是特别需要的d在活动中加入了很多逻辑,但你尝试只保留与查看相关的内容是正确的。如果应用程序相对较小,可能不值得将逻辑移出。此外,还有一些

如果您的抽象没有提供显著的好处,您应该避免它们

我尝试将任何大数据对象保存在管理器类中,因此根据您的示例,创建一个
Battle
manager类来保存其中涉及的所有逻辑可能是值得的,比如
postCastedSpell
函数。这样一来,所有的战斗信息都是自包含的,也可以在其他活动中使用

请记住,如果您使用数据管理器类,并且希望它们与UI进行某种交互,则必须使用或,因为战地管理器无法访问您的UI。例如,要调用
postCastedSpell
,调用如下所示: 作战活动

BattleManager bm = BattleManager.getInstance(user1, user2);

onSpellClicked() {
   bm.castSpell(spellId, user1, callback)
}

BasicCallback callback = new BasicCallback() {
    @Override
    onComplete() {
        if (MyInfoFragment.this.isVisible()) {
            [Update UI]
        }
    }
};

注意:当像我的示例那样使用回调时,当它最终被调用时,活动可能已经不在视图中,并且已经被垃圾收集。因此,在回调函数中,您需要首先确保它仍然可见,然后再尝试修改可能不再存在的UI。

您正在踏入area对应用程序架构的评价很高,有很多方法可以满足您的要求,没有一种方法比另一种方法更正确或更不正确。在您的活动中加入逻辑肯定不是坏事。活动只是用来运行应用程序的该部分,包括实例化视图、操纵视图、处理用户输入,等等。作为一名开发人员,你的工作是决定一个类中有多少逻辑是太多逻辑。这基本上取决于你个人的喜好。如果你觉得有些任务可以分为不同的类,那就去做。否则,在活动本身中做你需要做的。我希望有一个或两个正确的方法……无论如何感谢您对我的问题稍作澄清:)我同意Doug的观点,这是一个非常固执己见的问题。事实上,你可能会发现,是的,你会在你的活动中执行逻辑,不管你实现了什么POSA模式。需要一些与活动相关的逻辑,多少?这取决于你的实现谢谢大家的友好回复,这是有意义的。你是tre进入对应用程序架构的高度评价领域,有很多方法可以满足您的要求,没有一种方法比另一种方法更正确或更不正确。在您的活动中加入逻辑肯定不是坏事。活动只是用来运行应用程序的该部分,包括实例化视图、操纵视图等等处理用户输入等。作为一名开发人员,你的工作是决定一个类中有多少逻辑是太多逻辑。这基本上取决于你自己的个人喜好。如果你觉得有些任务可以分为不同的类,就去做。否则,在活动本身中做你需要做的。我希望有一个或两个正确的无论如何,谢谢你对我的问题稍加澄清:)我同意道格的观点,这是一个非常固执己见的问题