android - Clean Architecture(域)中的业务逻辑是什么

标签 android business-logic clean-architecture

人们说业务逻辑应该在领域层处理。

但是我不太明白Android中的业务逻辑是什么。

在我的项目中,当 API 请求成功时,我会缓存数据。
如果 API 请求失败,获取本地数据。

在我的理解中,它可以是一种业务规则。
1. API请求
2.如果API请求失败,从本地加载数据。

我觉得这个逻辑应该在repository中完成。
但是业务逻辑应该在领域层处理。

我是否误解了业务逻辑?

最佳答案

从 API 接收数据后,业务逻辑将引用 ifelse。假设您要使用 Picasso 加载图像。网址是:

https://.../imageId.jpg

但首先你需要获取这个对象,它有一个附加到它的 JSON 的 id:

{
 "id" : "1234123",
 "name" : "SomeName"
}

好吧,首先你需要获取这个:

val request = repository.fetchTheObject()
//let's assume the result is successful
//start of the business logic
val imageId = request.id
if(id == WHATEVER){
val url = "someUrl/${id}.jpg"
someMutableLiveData.postValue(url)
}else{
 showSomeError()    
}
//end of business logic

然后在您的 fragment 中您将收到最终结果:

viewModel.someMutableLiveData.observe(this, Observer{
  Picasso.get().load(it).into(imageView)
})

换句话说:

业务逻辑是您需要对从真实来源(数据库、文件、网络 API 等)收到的数据执行的所有操作,以实现理想的结果

对于安卓:

  • Fragment/Activity 用于与用户交互
  • ViewModel 用于业务逻辑(有时当您有 ifs/else 的语调、大量的 for 循环等时,Google 建议使用附加到 ViewModel 的 Presenter,从来没有这样做过)
  • 存储库,只是一个接收数据的来源(尽管有时它是多余的,比如当您只有一个真实来源时)

在您的情况下,业务逻辑正是您所描述的:如果您的请求失败,则获取本地数据,这是应用程序的业务逻辑。

I think this logic should be done in the repository.

嗯,你可以做到,我见过很多这样的例子,这真的取决于,有时可能是正确的。但是,如果您使用 ViewModel 来避免所有 Transformations,您可以在 ViewModel 而不是 中处理它存储库

关于android - Clean Architecture(域)中的业务逻辑是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59452173/

相关文章:

coding-style - 整洁的架构——在哪里放置输入验证逻辑?

Flutter 实现整洁架构的方式

design-patterns - 输入端口在整洁架构中的作用

android - 如何获取 Android 应用内订阅自动续订详细信息?

android - libjpeg 总是随 Android 一起安装吗?

stored-procedures - 我需要知道在程序中保留业务层的缺点

php - 在 3 层架构中实现业务逻辑

php - JSON异常: Value of type string cannot be converted to JSON Object?

java - 主要 Activity 上的 Android 登录框

domain-driven-design - DDD - 将项目添加到订单/收据时的价格计算