繁体   English   中英

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

[英]Adapter class vs toXXX() method in data class

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

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

class Data {
  int val;
  ...
}

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

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

class Data {
  int val;
  ...

  public DataRequest toDataRequest() {
    ..
  }
}

2. 有一个单独的类DataAdapter ,其中有adapter 方法,它返回DataRequest对象。

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

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

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

 +----------------------------+
 |       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实现映射逻辑。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM