什么是UseCase为什么要使用它?
2022-08-25 本文已影响0人
安安_660c
什么是UseCase?
UseCase的目的是成为 ViewModels 和 Repository 之间的中介。
假设将来您决定添加“编辑帖子”功能。您所要做的就是添加一个新的EditPost UseCase,其所有代码将与其他用例完全分离并分离。我们都见过很多次:引入了新功能,它们无意中破坏了先前存在的代码中的某些内容。创建一个单独的用例极大地帮助避免这种情况。
当然,你不能100%消除这种可能性,但你肯定可以把它降到最低。这就是 Clean Architecture 与其他模式的区别:代码是如此分离,以至于您可以将每一层都视为黑匣子。
为什么要使用UseCase?
我们了解** Clean Architecture**。它具有单独的层,其中之一是域层。域层包含应用程序的所有用例。用例负责处理单个任务。它简化了SOLID原则的单一责任原则的目的。
UseCase示例
下面给出了一个UseCase示例。我们从天气存储库获取每小时的天气数据。它正在处理单一响应和目的。
class HourlyDataUseCase {
var weatherRepository: WeatherRepository = WeatherRepository()
private val job = CoroutineScope(Dispatchers.IO)
fun invoke(weatherRequestModel: WeatherRequestModel, isSuccess:(WeatherDataHourly)->Unit, isFailed:(String)->Unit) {
val weather = weatherRepository.getHourly(
weatherRequestModel.type,
weatherRequestModel.host,
weatherRequestModel.key,
weatherRequestModel.lat,
weatherRequestModel.lon
)
job.launch {
weather.execute().apply {
when (this.isSuccessful){
true->isSuccess.invoke(this.body()!!)
false->isFailed.invoke(this.message())
}
}
}
}
fun cancel(onCancelled:()->Unit){
job.cancel("Job Cancelled")
onCancelled.invoke()
}
}
使用UseCase的优势
-
帮助删除代码重复:现在,我们可以轻松调用 USE CASE 类中的一个方法来访问两个不同的 ViewModels 中的用户配置文件数据,而不是将相同的过程放在两个不同的 ViewModels 中。
-
Screaming Architecture:当我们可以通过一目了然地瞥一眼就能获得新项目所做工作的基本概念时,我们称之为“Screaming Architecture:”。同样,用例应该以这样的方式编写,任何人都可以通过浏览类名来弄清楚他们做了什么。例如,GetUsersUseCase 用于从数据源中检索用户列表。