适配器 class 与数据 class 中的 toXXX() 方法

Adapter class vs toXXX() method in data class

我有一个场景,我想将对象转换为服务请求对象类型以调用服务。

我有一个这样的数据对象:

class Data {
  int val;
  ...
}

我想将此对象转换为服务请求对象,比如说 DataRequest。我正在考虑这两个选项:

1. Data class 本身有一个 toDataRequest() 方法。

class Data {
  int val;
  ...

  public DataRequest toDataRequest() {
    ..
  }
}

2。有一个单独的 class DataAdapter,并且里面有 adapt 方法,returns DataRequest 对象。

class DataAdapter {
  public DataRequest adapt(Data data) {
    ... 
  }
}

我倾向于第一个,因为它有助于减少 classes 的数量。我很想听听,对此用例的一般建议是什么?

通常选择第一个选项会更好。我们以字符串 class 为例。如果 class 的作者认为有用,许多 classes 可以变成字符串 。 class 的作者只需在 class 的末尾添加一个 toString 方法。他们将不必要求 Oracle 根据这些开发人员编写的 class 为字符串添加工厂方法。这不仅会让 Oracle 维护起来非常烦人,而且还会很糟糕,因为 String 对象的开销会随着所有工厂方法的增加而飙升。

这取决于你的架构。通常你有一个服务层和至少一个持久层。服务层位于持久层之上,通常架构只允许从较高层到较低层的访问。例如

 +----------------------------+
 |       service layer        |  // request object is placed here
 +----------------------------+
              | depends on
              V
 +----------------------------+
 |    persistence layer       |  // Data object is placed here
 +----------------------------+

因此,当您的 Data 对象具有方法 public DataRequest toDataRequest() 时,它具有对 DataRequest 的依赖性,这意味着较低层具有对较高层的依赖性。这通常不是你想要的。

因此,如果您使用 DataAdapter(也称为 DataMapper)并将其放置在服务层中,您将遵守上面显示的架构。

您还可以在 DataRequest 中实现映射逻辑。