不好的业务是怎么写的?
- 需求 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
好的业务是怎么写的
有一天
领导让你去银行存钱
一般来说,领导只希望知道这件事最后 成功、失败 了没,可能还想知道你 进度 怎么样了。
但是完成存钱逻辑是很多步骤的。
这还只是大致步骤,每个大致的步骤都还有很多细节,这些全部处理过程,是不需要告诉领导的。
所以我们写业务代码的时候要坚持一下原则
-
只需要操作单一对象
-
只需要告诉我成功、失败、进度
正确的写法如下:
//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解析请看下一章节