如何使用设计模式将一个对象转换为具有相同属性的另一个对象?没有库



我在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的原因。很抱歉省略了这个。

我已经用映射器类完成了这个

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;
}
}

您可以使用一种称为"反射"的技术。就像这篇文章一样:https://www.javainuse.com/java/chap1 此技术对于将一个对象映射到另一个对象等任务非常有效。 但它有一个缺点 - 这种映射可能很慢(相对而言,与直接映射相比,就像你一样(。 但是,我认为,就您而言,这是一个理想的解决方案。

来自服务包的影片和来自数据库包的影片具有相同的属性。您应该考虑为常见对象提供一个包。例如,在服务或数据库中需要的地方使用应用程序主包中的 Movie 要容易得多,也清晰得多。

最新更新