问题很简单。我需要将bean的内容转换为具有不同getter和setter的其他bean。这样做的设计模式是什么?
我认为适配器模式主要是指签名或接口到另一个的映射。不是对象之间的真实映射。
很多人都在谈论“mapper”,但我认为这不是一种设计模式。那么,实际上是否存在将对象映射到另一个对象的模式?
答案 0 :(得分:3)
我不知道任何流行的对象映射设计模式。
我一直在使用Dozer框架将内容从一个bean传输到另一个bean。
使用简单,易于与Spring集成。
参见: http://dozer.sourceforge.net/documentation/gettingstarted.html
答案 1 :(得分:1)
相关模式是Assembler,您可以在其中汇编一些给定另一个对象的对象。由于编写汇编程序可能很繁琐且容易出错,因此您可以使用对象映射库为您完成工作。
您可以查看的一个对象映射器是ModelMapper,它使用实际代码以安全的方式映射属性,字段和方法。
答案 2 :(得分:1)
Microsoft发布了一个很好的翻译模式。本教程使用的是C ++,但它很容易转换为Java。
这是一个教程:http://richhewlett.com/2010/06/11/a-useful-entity-translator-pattern-object-mapper-template/
一般的想法是你有一个通用的Translator抽象类,用你想要在它们之间转换的类类型进行参数化。具体实现提供了" to" "来自"转换方法。
此模式的优点是它不需要在转换中的两个类之间进行耦合。它是在一个可重用的通用框架中实现的,它通过一次性转换解耦逻辑不会使代码混乱。
答案 3 :(得分:1)
一个伟大的“设计模式”是不将映射的对象彼此紧密耦合。例如,复制构造函数意味着如果编辑源类,则还必须编辑目标类,这可能会导致大型项目中出现各种下游问题。这样想吧。非常频繁的映射是从UI数据结构到后端数据结构。您应该可以废弃UI,而不必更改新UI的后端。 MVC设计模式经常用于此类工作。
答案 4 :(得分:0)
我同意Javakid,你需要的不是设计模式,而是处理从一个bean到另一个bean的转换的好方法。
如果你真的需要命名,那就应该像dto模式一样,因为你正在使用数据传输对象。您可以使用访问者在构建转换后的bean树时检查所有bean树。
因此我建议您自己使用框架或开发映射,这取决于图形的大小。 Dozer是goode解决方案,但它一直使用Reflection API并隐藏映射代码。所以你将无法轻松调试它,我知道的最好的其他运行时映射库如Orika。
但是,如果您希望能够查看代码,调试代码并获得编译器反馈,您也可以使用Selma。
最后,您还可以向此主题报告以获取在java中处理bean到bean映射的解决方案的大图:any tool for java object to object mapping?