问题 用于将一个模型转换为另一个模型的设计模式


基本上,我的应用程序中有许多对象,我必须在发送请求之前将它们转换为另一个第三方对象。收到响应后,我必须将这些对象转换回我的应用程序支持的对象。

我可以使用什么模式将一个模型对象转换为另一个模型对象?


2947
2017-10-25 14:09


起源

stackoverflow.com/questions/1236667/object-conversion-pattern - Jigar Parekh


答案:


适配器或外观模式应解决您的问题:

适配器: http://www.youtube.com/watch?v=TriX8OiEhOU

正面: http://www.youtube.com/watch?v=WLjvNpP6yeQ


3
2017-10-25 14:21



为什么Facade模式会解决他的问题?不是那种模式 “为更大的代码提供简化的界面”?我认为你不应该把转换逻辑放在外观中。 - Matthijs Wessels
适配器也是一种过度杀伤力,只有在基本模型中需要更改数据以反映在新模型中时才应使用。转换器类也有助于分离责任。 - danidacar


我认为没有特定的模式,但你只需要一个“转换器”或“转换器”类,它接受一个对象并返回另一个对象:

MyObject convert(ThirdPartyObject obj);
ThirdPartyObject convert(MyObject obj);

8
2017-10-25 14:21





您可能会寻找适配器模式: http://en.wikipedia.org/wiki/Adapter_pattern


1
2017-10-25 14:12



是的,我可以,但在我的情况下,我只有两个简单的POJO,没有接口。没有任何其他模式或更好的方式进行转换。 - Ashay Batwal
您可以查看代理模式,但实际上这取决于您的偏好和环境。 - SomeWittyUsername


确定对象的上下文有点困难,但是看看Assembler模式,虽然技术上不是设计模式。 Assembler类用于从一个对象映射到另一个对象,特别是当一个对象是域对象的DTO(有点像您的响应对象)时。 Dozer框架可以帮助您进行一些繁琐的转换。


1
2017-10-25 14:23





适配器 和 正面 是结构模式。你没有任何模式可以满足 对象转换

在创作图案前面, 生成器 是你能想到的一种模式。

通常 生成器 pattern用于构建具有强制和可选参数的对象。但你可以通过构建必要的对象来微调它。

您也可以在没有模式的情况下解决问题。要么你可以使用 对象组成 要么 编写自己的方法来转换对象

用代码示例看看相关的SE问题:

如何在Java中修剪其某些字段的对象?


1
2018-03-20 02:14