对象转换的设计模式(java)


21

除了偶尔的工厂和MVC之外,我不经常使用设计模式,我想更多地使用它们。

我手头有一个具体案例,希望您对在这种情况下使用设计模式有意见。

在我的应用程序中,我不得不经常在不同情况下转换对象。我可能必须将Hibernate POJO转换为DTO,因为我使用GWT,并且Hibernate POJO不能序列化,也不能通过线路发送。

在另一种情况下,我可能需要将Java对象转换为SolrInputDocument的对象,以便由Solr进行索引。

我想知道是否应该为此使用设计模式。看来“对象转换”是一种通用任务,可以通过一种模式以灵活/抽象的方式进行处理,但是我真的不知道如何实现。

如果没有模式,我只会为每种转换类型创建一个单独的类,例如CourseToSolrInputDocument(Course是我的应用程序中的Hibernate实体)。或CourseToCourseDTO。这些转换类中的每一个都可能具有一个称为的静态方法convert(),该方法将源对象作为输入并返回输出对象。

但这不是一个真正的模式,对吗?因此,我从泛型入手,并创建了实现Converter接口的此类。但是以某种方式感到傻傻的创建了一个通用的接口,除了能够祝贺自己使用通用外,我没有真正的优势。

public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument>         {
    @Override
    public void convert(Course source, SolrInputDocument destination) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

因此,这里的真正问题是:是否存在适用于通用对象转换的模式?您的方法是什么?与仅使用每个转换类的类型方法相比,优点是什么?


模式更多是为您的工作(以及如何正确执行示例)命名,而不是令人讨厌的使用。与如何使用更多模式相比,更好的问题是:我已经使用了哪些模式(可能以某种不完整/复杂的方式)。
user470365

Answers:


18

翻译模式是你问什么。

但是我怀疑您在寻找的是框架,而不是模式。我相信Dozer在Java世界中很流行。


我知道推土机和Apache Beanutils。我想在“转换结构”中使用其中之一。同时,我发现Spring提供了一种转换对象的解决方案,可以在这里找到:static.springsource.org/spring/docs/3.0.0.RC3/reference/html/…。我以前看过它,但是很久以前,所以我自己的界面有点像我从Spring记得的那样。我将使用Spring解决方案,因为Spring已经在我的项目中,并且看起来是一种不错的方法。
Julius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.