我有一个应用程序的体系结构:view->viewmodel->repository->Datasource
我的DataSource正在消费一个webservice然后接收Soap对象,我想将其转换为自定义Pojo对象。因此,通过使用RxJava,我通过以下流程调用datasource方法:
视图模型
repository.webserviceCall(data)...
.subscribe();
存储库
public Single<SoapObject> webserviceCall(String data) {
return dataSource.webserviceCall(data);
}
数据源
public Single<SoapObject> webserviceCall(String data) {
WSSoapDAO soapDAO = new WSSoapDAO("webserviceMethodName");
soapDAO.addProperty("data", data);
return soapDAO.call();
}
然后我想知道应该在哪里转换datasource调用中接收到的SoapObject,或者在Repository类中、ViewModel类中,或者在de datasource类本身中?
谢谢
除了Onik的回答,我想用几件事来扩展它。
>
这是基于事实的观点,所以要小心你走的地方。:)
我同意这通常是一个存储库问题(有一个“但是”)。通常,如果您从远程服务接收的数据需要转换,那么您希望从所述数据的使用者(ViewModel,甚至您的本地数据库)那里提取这些数据。
如果要针对不同的用途对数据进行不同的转换,那么您可能需要重新考虑您的体系结构(或者更确切地说,您的远程服务!);在任何情况下,viewModel应该只做(在我看来)与为了需要它的视图的目的将你的本地域对象/模型/实体修改成某种不同的东西有关的事情。换句话说,如果一个特定的“屏幕”需要转换数据(例如,为了简化Recyclerview,将几个模型简化为一个list
,那么这可能属于ViewModel,假设您注入了一个“mapper”对象(transformer、mapper、whateverDelegate、youNameIt),这样ViewModel就可以委托这个转换(因此简化了测试)。
在任何情况下,请记住,这是非常基于意见的,并且是特定于领域的,但最终,您需要一个干净的存储库,它为您提供数据,并且您不想每次都想到(或知道)它来自哪里的数据,而不是以您所关心的格式。