将休息模型映射到Android

时间:2016-03-05 19:27:18

标签: android domain-driven-design retrofit

我希望将我的域模型和休息模型分开,这样我就不必担心在其他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
    }
});

2 个答案:

答案 0 :(得分:0)

通常你想要一个转换器。转换器的工作是从外部Api解释到您的域上下文/模型。转换器可以实现为“工厂”。您将工厂方法传递给正确的参数,它将返回给您的域理解/可以使用的东西。

现在,当你说“没有在主线程上实例化”时:听起来你已经回答了自己的问题,因为这听起来像你在暗示通过线程进行并发。除非你同时启动一个新线程,否则你可以移动代码但是你总是在“主”线程上。

答案 1 :(得分:-1)

获得响应后,只需调用map {someMapper()。map(from,to)}

这将是您所有映射器的常规界面:

interface Mapper<FROM, TO> {
fun map(model: FROM): TO

}