将对象从一种格式转换为另一种格式(设计模式)

时间:2014-04-16 04:25:38

标签: java design-patterns adapter soa

我正在构建依赖于其他服务的服务。典型的面向服务架构。我依赖的服务暴露了一些API和数据类型。如果我将该服务公开的对象类型转换为我的服务理解的特定对象,我感到很困惑。我确实希望他们的服务随着时间而变化,因为这是两种不同的服务。我有两个选择:

  • 直接在我的服务中使用这些数据类型,并将其传递给方法。
  • 将这些转换为只有我的服务理解的特定数据类型。 (如果我用0更改,对象将看起来完全相同)。

我试图回答这些问题,但仍无法做出最后的决定。我需要帮助才能做出这个决定。

为什么我应该使用封装/转换类型?

  • 每次他们在服务中构建更改时阻止构建。
  • 防止大范围更改(适配器模式):更改电线 format将导致我只更改封装类。

为什么我不应该对封装的类型进行更改?

  • 这些类看起来与有线格式类完全相同。 (无用的努力来维持额外的课程)

据我所知,如果我采用任何一种方法,影响都是一样的。帮忙?

2 个答案:

答案 0 :(得分:1)

我不是架构师或SOA专家,所以如果我说任何愚蠢的话,请原谅: - )

但我真的认为这里的方法是保持您的服务简单。

在你的鞋子里,我只是直接使用现有的API。我不会花任何时间将这些方法包装或调整到另一个API中。您的第二项服务(使用现有的第一项服务)业务逻辑应该负责此转换,IMO,,除非您被迫使用现有API 做一些非常昂贵的事情。

请记住,服务是可变的。他们是软件。他们有错误,随着时间的推移业务逻辑发生变化,您必须更改API,有时您必须保持旧方法与其他服务使用者兼容。您可能不希望维护两个提供相同信息的API,而没有任何实际原因。不是维护工作的两倍。

创建另一个API只是为了让数据格式听起来有点像旧的" DTO是邪恶的"火焰战争。我想现在很少有人写下使用DTO的优点: - )

答案 1 :(得分:0)

这是一个基于意见的问题,所以我的意见是,你应该制作自己的数据类型,让你的代码片段理解哪个变量应包含哪些内容。

我认为服务是一种数据提供者,它接受某些请求并满足我们的需求,反过来可能会给我们一些数据。我认为服务的角色只是为客户提供服务。

客户应负责接受服务返回的数据并将其存储在某些数据结构中,因为单个服务可能有n个不同的客户端,并且它们可能有不同的要求,这可能导致他们设计客户特定的数据-structure包含数据。

另外,正如您所说,客户服务可能会在一段时间内发生变化,那么如果您制作自己的数据结构,那么您需要在一个地方进行更改,其余代码将是安全的