Android 如何正确的写一个业务 ---- Biz

407 阅读2分钟

不好的业务是怎么写的?

  • 需求 Android FaceBook登录
    //
    private var callbackManager: CallbackManager? = null

    //
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //回调管理者创建
        callbackManager = CallbackManager.Factory.create()
        //登录结果回调注册
        LoginManager.getInstance().registerCallback(callbackManager, object : FacebookCallback<LoginResult?> {
            override fun onSuccess(loginResult: LoginResult?) {

            }

            override fun onCancel() {
            }

            override fun onError(exception: FacebookException) {
            }
        })
        //点击FaceBook Logo执行登录
        iv_login.setOnClickListener {
            LoginManager.getInstance().setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK)
            LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"))
        }
    }
    
    //返回值监听
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        callbackManager?.onActivityResult(requestCode, resultCode, data)
    }
    

上部分代码是我稍微 整理、排版、删减不相关逻辑、添加注释 后,展现给大家的效果。

代码缺点很明显

  • 逻辑代码散落在Activity的多个地方
  • 涉及到很多个对象,每个对象都有很多细节操作
    • CallbackManager
    • LoginManager

好的业务是怎么写的

有一天

领导让你去银行存钱

一般来说,领导只希望知道这件事最后 成功、失败 了没,可能还想知道你 进度 怎么样了。

image.png

但是完成存钱逻辑是很多步骤的。

image.png

这还只是大致步骤,每个大致的步骤都还有很多细节,这些全部处理过程,是不需要告诉领导的。

所以我们写业务代码的时候要坚持一下原则

  • 只需要操作单一对象

  • 只需要告诉我成功、失败、进度


正确的写法如下:

//FaceBook登录业务
private var faceBookLoginBiz: FaceBookLoginBiz? = null

override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
    super.onCreate(savedInstanceState, persistentState)
    //初始化
    faceBookLoginBiz = FaceBookLoginBiz(this, object : FacebookCallback<LoginResult?> {
    
        //登录成功
        override fun onSuccess(loginResult: LoginResult?) {

        }

        //登录取消
        override fun onCancel() {
        }

        //登录错误
        override fun onError(exception: FacebookException) {
        }
        
    })
    //登录
    iv_login.setOnClickListener {
        faceBookLoginBiz.login(mContext)
    }
}

FaceBookLoginBiz源码

package com.okaynaira.android.biz;

import android.app.Activity;
import android.content.Intent;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginBehavior;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import java.util.Arrays;

import leo.work.support.base.LifeControlInterface;
import leo.work.support.base.biz.CommonLifeBiz;

/**
 * ---------------------------------------------------------------------------------------------
 * 功能描述: FaceBook登录
 * ---------------------------------------------------------------------------------------------
 * 时  间: 2021/12/29
 * ---------------------------------------------------------------------------------------------
 * 代码创建: 1613-3
 * ---------------------------------------------------------------------------------------------
 * 代码备注: 设计好暂时先不用,等后期再用
 * ---------------------------------------------------------------------------------------------
 **/
public class FaceBookLoginBiz extends CommonLifeBiz {

    private CallbackManager manager;

    public FaceBookLoginBiz(LifeControlInterface lifeControlInterface, FacebookCallback<LoginResult> facebookCallback) {
        super(lifeControlInterface);
        checkManager();
        LoginManager.getInstance().registerCallback(manager, facebookCallback);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        checkManager();
        manager.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (manager == null) {
            return;
        }
        LoginManager.getInstance().unregisterCallback(manager);
        manager = null;
    }

    //登录
    public void login(Activity activity) {
        //
        LoginManager.getInstance().setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
        //
        LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile"));
    }

    //检查CallBack
    private void checkManager() {
        if (manager != null) {
            return;
        }
        manager = CallbackManager.Factory.create();
    }

}

CommonLifeBiz是一个可以监听Activity,Fragment生命周期方法的Biz

CommonLifeBiz解析请看下一章节