避免与数据对象重复

时间:2016-01-13 04:25:10

标签: java spring web-services architecture

我们有一个服务,可以生成许多不同的响应bean。它们由应用程序内的其他服务使用。还有一个Web服务,它公开了相同功能的部分。它返回几乎与内部响应bean 1:1对应的响应对象。当然它们并不完全相同:删除了一些字段,添加了swagger文档属性等。

重复使用相同的豆子是不可能的,它们是不同的,即使只是略有不同,将它们混合在一起感觉不好,因为一个是内部的而另一个是暴露的。此外,还有这样一种梦想:在现代微服务类型中开发这种模式,其中组件是模块化和独立的。

不重复意味着基本上复制每个响应对象,创建转换器,保持同步。

两种方式都很糟糕,我想不出任何好事。

1 个答案:

答案 0 :(得分:2)

烨。

我经常来这儿。有一些工具可以使映射器更容易(bean-mappers和其他东西),但它们通常会引入更多的错误。我也看到/尝试过继承方案,让一个域对象继承另一个...这再一次导致了比它解决的问题更多的问题。

事实证明,在90%的情况下,您对内部与外部数据表示的关注点不同。映射层是将这些问题分开的好地方。将它们结合在一起会让我更加紧张。你的里程可能有所不同,但我怀疑它会,除非你有最简单的应用程序,你需要有单独的对象。

这是一个无聊的代码,但它很简单,而且非常容易测试。一旦你这样做,你的封装就会上升,你可以让你的合同独立于你的内部实现而改变。