我希望将我的域模型和休息模型分开,这样我就不必担心在其他API更改时更改域模型。此外,我通过将休息模型转换为域模型来开始使用UI友好格式。
我使用改造来使用Restful Web服务。在onResponse()中,我将其余模型映射到域模型中。我讨厌在主线程上实例化一堆对象。有哪些干净的方法可以不在主线程上映射?
String username = "test";
Call<User> call = apiService.getUser(username);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
int statusCode = response.code();
User user = response.body();
// Want to convert rest model to domain model for my use
Account account = AccountMapper.map(user);
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// Log error here since request failed
}
});
答案 0 :(得分:0)
通常你想要一个转换器。转换器的工作是从外部Api解释到您的域上下文/模型。转换器可以实现为“工厂”。您将工厂方法传递给正确的参数,它将返回给您的域理解/可以使用的东西。
现在,当你说“没有在主线程上实例化”时:听起来你已经回答了自己的问题,因为这听起来像你在暗示通过线程进行并发。除非你同时启动一个新线程,否则你可以移动代码但是你总是在“主”线程上。
答案 1 :(得分:-1)
获得响应后,只需调用map {someMapper()。map(from,to)}
这将是您所有映射器的常规界面:
interface Mapper<FROM, TO> {
fun map(model: FROM): TO
}