如何使用设计模式将一个对象转换为具有相同属性的另一个对象?没有图书馆
How cast an Object to another Object with the same attributes using design pattern? without libraries
我在 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;
}
我已经通过创建一个进行转换的 class 解决了这个问题:
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;
}
}
但是我对此不是很满意。那么你可以推荐我使用哪种设计模式?
编辑:
哦,对不起,我忘记了一些细节,我的服务有另一个属性名称,即我的数据库,这就是我有两个 pojo 的原因。抱歉忽略了这个。
来自服务包的电影和来自数据库包的电影具有相同的属性。您应该考虑为普通对象准备一个包。例如,在服务或数据库中需要的任何地方使用应用程序主包中的电影会更容易和清晰。
我已经用 Mapper 做到了 class
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;
}
}
您可以使用一种称为 "reflection" 的技术。喜欢这篇文章:https://www.javainuse.com/java/chap1
这种技术对于将一个对象映射到另一个对象之类的任务非常有用。但它有一个缺点——这样的映射可能会很慢(相对而言,与直接映射相比,就像你所做的那样)。
但是,我认为,对于您的情况,这是一个理想的解决方案。
我在 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;
}
我已经通过创建一个进行转换的 class 解决了这个问题:
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;
}
}
但是我对此不是很满意。那么你可以推荐我使用哪种设计模式?
编辑:
哦,对不起,我忘记了一些细节,我的服务有另一个属性名称,即我的数据库,这就是我有两个 pojo 的原因。抱歉忽略了这个。
来自服务包的电影和来自数据库包的电影具有相同的属性。您应该考虑为普通对象准备一个包。例如,在服务或数据库中需要的任何地方使用应用程序主包中的电影会更容易和清晰。
我已经用 Mapper 做到了 class
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;
}
}
您可以使用一种称为 "reflection" 的技术。喜欢这篇文章:https://www.javainuse.com/java/chap1 这种技术对于将一个对象映射到另一个对象之类的任务非常有用。但它有一个缺点——这样的映射可能会很慢(相对而言,与直接映射相比,就像你所做的那样)。 但是,我认为,对于您的情况,这是一个理想的解决方案。