人们说业务逻辑应该在域层中处理。
但是我不太清楚Android中的业务逻辑是什么。
在我的项目中,当API请求成功时,我缓存了数据。如果API请求失败,请获取本地数据。
据我了解,这可能是一种业务规则。1. API请求2.如果API请求失败,则从本地加载数据。
我认为这种逻辑应该在存储库中完成。但是业务逻辑应该在域层中处理。
我误解了业务逻辑吗?
业务逻辑是指从API接收数据后所拥有的if
和else
。假设您要使用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等)接收的数据执行的所有操作,以获得理想的结果
[对于Android:
Fragment
/ Activity
与用户互动ViewModel
用于业务逻辑(有时当您具有if
s / else
的音调,很多for循环等音调时,Google建议使用附加到ViewModel的Presenter,从不这样做)在您的情况下,业务逻辑正是您所描述的:如果您的请求失败,则获取本地数据,这是应用程序的业务逻辑。
我认为此逻辑应在存储库中完成。
好吧,我可以看到很多类似的例子,但这确实取决于,有时可能是正确的。但是,如果为了避免全部使用ViewModel
而使用Transformations
,则可以只在ViewModel
中处理它,而不是Repository
。