【问题标题】:What is Business logic in Clean Architecture (domain)什么是清洁架构(领域)中的业务逻辑
【发布时间】:2020-04-14 13:21:30
【问题描述】:

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

但我并不完全了解 Android 中的业务逻辑。

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

据我了解,这可能是一种商业规则。
1. API请求
2.如果API请求失败,从本地加载数据。

我认为这个逻辑应该在存储库中完成。
但是业务逻辑应该在领域层处理。

我是不是对业务逻辑有误解?

【问题讨论】:

    标签: android business-logic clean-architecture


    【解决方案1】:

    在您从 API 收到数据后,业务逻辑将参考您拥有的 ifs 和 elses。假设您想使用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
    

    然后在您的片段中,您将收到最终结果:

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

    换句话说:

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

    如果是安卓系统:

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

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

    我认为这个逻辑应该在仓库中完成。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 2016-12-28
      • 1970-01-01
      • 2012-05-27
      • 2014-02-24
      • 2011-01-04
      • 2016-11-30
      相关资源
      最近更新 更多