Android代码重构:清洁代码用途
#kotlin #android #mobile #tristan

介绍

  • 在本系列中,我们将谈论代码重构,这被认为是一个更中间的主题。因此,如果您从未听说过用户赛或Android Clean Code架构,那么此教程系列可能不适合您。
  • 另外,我想指出的是,这些模式实际上更像是指南,而不是必须遵守的严格规则。

资源

  • 我在Greenstand Android GitHub存储库中发现了这些重构模式。具体来说,我查看了这3个文件:

1) UsesCases Abstraction

2) No parameters UseCase

3) Multiple parameters UseCase

1)使用捕获抽象

  • 因此,用户酶抽象看起来像这样:
abstract class UseCase<in Params : Any, out Result> {

    abstract suspend fun execute(params: Params): Result
}
  • 只是一点提醒,默认情况下,Kotlin中的所有抽象类都是打开的,不能实例化,而只能继承。我们使用此抽象类来实现相关的用户酶对象的相同行为,这使我们能够建立is a关系。
  • 我应该指出的是inout操作员。称为contravariantvariance注释。如果不深入探究通用物,我们就可以理解,in(违反)操作员意味着它只能被消耗且永远不会产生(不允许作为返回类型)。 out(方差)操作员意味着仅生产(用作返回类型)

2)没有参数用户酶

  • 因此,如果我们从一个用户酶代码开始,例如:
class LogoutUseCase constructor(
    private val authRepository: AuthRepository
) {
    suspend fun invoke():Boolean{
        return authRepository.signUserOut()

    }
}

  • 那么我们可以实施我们的抽象用途酶,从而:
class LogoutUseCase constructor(
    private val authRepository: AuthRepository
):UseCase<Unit,Boolean>() {

    override suspend fun execute(params: Unit): Boolean {
        return authRepository.signUserOut()
    }
}
  • 因此,让我们谈谈execute(params: Unit)中使用的Unit类。 Unit类型与Java的void相同的功能。但是,这两个与众不同的是,Unit是一种完整的类型,与void不同,它可以用作类型的参数。与仿制药结合使用时,它使其有用。要调用execute()方法,我们会这样这样做:
logoutUseCaseInstance.execute(Unit)
  • 我们能够使用Unit做到这一点,因为它是单身人士,返回Unit对象

3)多个参数用户酶

  • 现在,当我们面对多个参数时,我们将了解如何使用此模式。因此,从类似的课程开始:
class CreateUserUseCase constructor(
    private val database:DatabaseRepository
){

    suspend operator fun invoke(email:String, username:String):Flow<Response<Actions>>{
        return database.createUser(email, username)
    }
}

  • 然后,当我们实施模式时,我们会得到:
data class CreateUserParams(
    val email: String,
    val username: String,
)

class CreateUserUseCase constructor(
    private val database:DatabaseRepository
):UseCase<CreateUserParams,Flow<Response<Actions>>>(){


    override suspend fun execute(params: CreateUserParams): Flow<Response<Actions>> {
        return database.createUser(params.email, params.username)
    }
}

  • 注意CreateUserParams类,这就是我们处理多个参数的问题。通过创建数据类,我们能够处理任何需要数量的参数。

  • 虽然这看起来像是额外的工作,但这种重构的真正作用是使我们的代码更具可读性和可预测性。

结论

  • 感谢您抽出宝贵的时间阅读我的博客文章。如果您有任何疑问或疑虑,请在下面发表评论或在Twitter上与我联系。