Android 优雅的处理是否jump逻辑

在项目开发中我们都会遇到判断是否登录是否是会员是否有数据等等,不唯一跳转路径的业务,这种业务有个优点就是好写,确定就是需要写的多。那写的多能算一个缺点吗? 也不算,但是对于代码的刻度性来讲,一个方法一点击引用处,出现几十处,总归不是很好的,我们需要将这些简单的功能精简化

在这里插入图片描述

是不是很简单的一个逻辑,反手就写出来了

// UserUtils:
fun isLogin(user: User) :Boolean{
	return user.xx == null
}

然后呢?然后当然是使用了

// Activity A
// Activity B
if (UserUtils.isLogin()) {
	startActivity(Intent(this,A::class.java))
} else {
	startActivity(Intent(this,B::class.java))
	}

然后就是出现了 A jump B isLogin(), A jump C isLogin(), C jump D isLogin …

那我们是不希望出现这种情况的,这种代码耦合性太高了,并且及其不易维护, 加入我们user 的参数放生了变化,那我们是不是需要在调用的每一个地方做一个修改(只是说明出现类似问题会很麻烦)

怎么优雅处理是否jump逻辑

什么情况是最好维护的?什么情况是最好管理的?

答案很明显,当然是在一个文件中,在一个文件中管理是否jump逻辑,我们需要的是在一个类文件中进行管理,说白了就是集中路由,我在这里称之为集中路由就是将项目中的jump全部拿到一个navigation文件中处理。

以是否登录jump为例:

首选我们需要一个用户登录状态管理类:

object Authenticator {
	fun isLogin() :Boolean{
		return true
	}
}

其次我们创建navigator 类

class Navigator {

	fun show(context:Context) {
		when (authenticator.userLoggedIn()) {
            true -> jump(context)
            false -> jumpLogin(context)
        }
	}
}

很简单的就在此处进行了判断 并且进行了路由集中管理

那么上述是一个boolean 的处理,在jump 方法中进行路由的处理,

总结

在是否jump 类型的业务中,我们将重复使用的功能拿到一个文件中处理是很好的解决方式,既可以集中处理路由,又有易修改等特点。要是将此方法和注解一起使用,会更加方便,比如Dagger2

class RouteActivity : AppCompatActivity() {
    private val appComponent: ApplicationComponent by lazy(mode = LazyThreadSafetyMode.NONE) {
        (application as ImageKotlinDemoApplication).appComponent
    }
    @Inject 
    internal lateinit var navigator: Navigator
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        appComponent.inject(this)
        navigator.showMain(this)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值