我在Java中有两个POJO:Movie
用于数据库,其他Movie
用于从请求到Web服务的类似结果。
package .service
public class Movie{
@Serialized("Title")
private String title;
@Serialized("Year")
private String year;
@Serialized("Poster")
private String poster
}
package .database
public class Movie{
@ColumnInfo(name = "title")
private String title;
@ColumnInfo(name = "year")
private String year;
@ColumnInfo(name = "poster")
private String poster;
}
我已经通过创建一个进行转换的类来解决了这个问题:
public class MovieObjectAdapter {
public static List<service.Movie> castFrom(List<database.Movie>moviesDatabase){
List<service.Movie> moviesModel = new ArrayList<>();
for (database.Movie movie:
moviesDatabase) {
service.Movie movieModel = new service.Movie();
movieModel.setTitle(movie.getTitle());
movieModel.setPoster(movie.getPoster());
movieModel.setYear(movie.getYear());
moviesModel.add(movieModel);
}
return moviesModel;
}
}
但是我对此不太满意。那么,您可以推荐哪种设计模式供我使用?
编辑:
抱歉,我忘记了一些细节,我的服务还有另一个属性名称,即数据库,这就是我拥有两个pojos的原因。抱歉,忽略了这一点。
答案 0 :(得分:1)
我已经通过Mapper类做到了
public final class Mapper {
public static service.Movie from(database.Movie dMovie) {
service.Movie movie = new service.Movie();
// set the properties based on database.Movie
return movie;
}
}
答案 1 :(得分:1)
您可以使用一种称为“反射”的技术。就像本文中一样:https://www.javainuse.com/java/chap1 该技术对于将一个对象映射到另一个对象非常有效。但这有一个缺点-这样的映射可能比较慢(相对于直接映射,就像您所做的那样)。 但是,我认为,对于您而言,这是一个理想的解决方案。
答案 2 :(得分:0)
服务包中的电影和数据库包中的电影具有相同的属性。您应该考虑为常见对象准备一个包装。例如,在服务或数据库中需要的任何地方使用应用程序主程序包中的Movie都更加轻松明了。