当前位置: 首页 > 知识库问答 >
问题:

在哪里转换webservice结果,是存储库还是ViewModel?

葛季萌
2023-03-14

我有一个应用程序的体系结构: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类本身中?

谢谢

共有1个答案

仉成益
2023-03-14

除了Onik的回答,我想用几件事来扩展它。

>

  • 这是基于事实的观点,所以要小心你走的地方。:)

    我同意这通常是一个存储库问题(有一个“但是”)。通常,如果您从远程服务接收的数据需要转换,那么您希望从所述数据的使用者(ViewModel,甚至您的本地数据库)那里提取这些数据。

    如果要针对不同的用途对数据进行不同的转换,那么您可能需要重新考虑您的体系结构(或者更确切地说,您的远程服务!);在任何情况下,viewModel应该只做(在我看来)与为了需要它的视图的目的将你的本地域对象/模型/实体修改成某种不同的东西有关的事情。换句话说,如果一个特定的“屏幕”需要转换数据(例如,为了简化Recyclerview,将几个模型简化为一个list ,那么这可能属于ViewModel,假设您注入了一个“mapper”对象(transformer、mapper、whateverDelegate、youNameIt),这样ViewModel就可以委托这个转换(因此简化了测试)。

    在任何情况下,请记住,这是非常基于意见的,并且是特定于领域的,但最终,您需要一个干净的存储库,它为您提供数据,并且您不想每次都想到(或知道)它来自哪里的数据,而不是以您所关心的格式。

  •  类似资料:
    • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。

    • 问题内容: 很快的问题,在将数据插入数据库之前或之后调用(或)是一个更好的主意吗? 之前: 新的较长字符串将使我不得不更改数据库以在字段中保留较长的值。(可以更改为804个字符的字符串) 之后: 这将需要更多的服务器处理,并且在每个页面加载或AJAX加载中可能进行数百次调用。 太好了 检索结果时进行转换会大大降低我的代码速度吗?我应该更换数据库吗? 问题答案: 我建议将最原始的数据形式存储在数据库

    • 我知道这是自动完成的——访问数据的频率越高,它存储的处理器就越近。但我能用Java语法影响它们的位置吗?按照我的理解,Volatile将数据放在三级缓存或RAM中,因为所有线程都可以看到它,对吗?

    • 问题内容: 我正在Eclipse中进行Java项目。我创建了一个名为“ Spring”的用户库,并向其中添加了所有的Spring jar。我的问题是,Eclipse在哪里存储该库?是否将所有jar文件复制到磁盘上某个新目录中?还是在某些配置文件中维护有关哪些jar属于用户库的信息? 问题答案: Eclipse不会复制用户库的任何内容,它只是具有特定于机器的绝对路径的容器。用户库定义存储在工作空间中

    • 问题内容: 我已经卸载了wamp服务器,现在我需要恢复数据库。我该如何做? 问题答案: 无论如何,您都可以知道: 感谢MySql论坛的Barry Galbraith http://forums.mysql.com/read.php?10,379153,379167#msg-379167