介绍
- 在本系列中,我们将谈论代码重构,这被认为是一个更中间的主题。因此,如果您从未听说过用户赛或Android Clean Code架构,那么此教程系列可能不适合您。
- 另外,我想指出的是,这些模式实际上更像是指南,而不是必须遵守的严格规则。
资源
- 我在Greenstand Android GitHub存储库中发现了这些重构模式。具体来说,我查看了这3个文件:
3) Multiple parameters UseCase
1)使用捕获抽象
- 因此,用户酶抽象看起来像这样:
abstract class UseCase<in Params : Any, out Result> {
abstract suspend fun execute(params: Params): Result
}
- 只是一点提醒,默认情况下,Kotlin中的所有抽象类都是打开的,不能实例化,而只能继承。我们使用此抽象类来实现相关的用户酶对象的相同行为,这使我们能够建立
is a
关系。 - 我应该指出的是
in
和out
操作员。称为contravariant
和variance
注释。如果不深入探究通用物,我们就可以理解,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上与我联系。