Android中rest模型到域模型的映射

Android中rest模型到域模型的映射,android,domain-driven-design,retrofit,Android,Domain Driven Design,Retrofit,我希望将我的域模型和rest模型分开,这样我就不必担心在RESTAPI更改时更改域模型。此外,通过将rest模型转换为域模型,我可以使用UI友好的格式 我使用改型来使用RESTfulWeb服务。在onResponse()中,我将rest模型映射到域模型。我讨厌在主线程上实例化一堆对象。有哪些干净的方法可以不在主线程上映射 String username = "test"; Call<User> call = apiService.getUser(username); call.enq

我希望将我的域模型和rest模型分开,这样我就不必担心在RESTAPI更改时更改域模型。此外,通过将rest模型转换为域模型,我可以使用UI友好的格式

我使用改型来使用RESTfulWeb服务。在onResponse()中,我将rest模型映射到域模型。我讨厌在主线程上实例化一堆对象。有哪些干净的方法可以不在主线程上映射

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
    }
});
String username=“test”;
Call Call=apiService.getUser(用户名);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
int statusCode=response.code();
User=response.body();
//要将rest模型转换为域模型以供我使用吗
Account=AccountMapper.map(用户);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//由于请求失败,此处记录错误
}
});

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


现在,当您说“不在主线程上实例化”时:听起来您已经回答了自己的问题,因为这听起来像是建议通过线程进行并发。除非您同时启动一个新线程,否则您可以移动代码,但您将始终处于“主”线程上。

收到响应后,只需调用map{someMapper().map(from,to)}

以下是所有地图绘制者的通用界面:

interface Mapper<FROM, TO> {
fun map(model: FROM): TO
接口映射器{
趣味地图(型号:FROM):至

}

您可以查看此处了解可能的副本: