使用枚举实现J2EE应用程序中的DTO转换?

时间:2016-05-03 16:28:52

标签: java spring entity-framework enums dto

这是我甚至不知道如何在谷歌搜索的主题之一(已经尝试过,大部分结果都是针对C#),所以我在这里: 我正在搞乱我们庞大的应用程序,试图开始工作一个全新的DAO /实体/服务/ DTO ...... euh ......的事情。我或多或少地独自离开了,而且,或多或少,我已经了解了一些方法,也许还有一两个方法。

问题在于我从数据库到服务的所有方式,#34; up":

  • 我有一个DAO类,它执行存储在Entity类中的查询。执行后,它返回带有值的实体。
  • 服务接收实体,并以某种方式将实体转换为DTO并在需要时将其返回。

我的问题是"某种程度上"代码就像这样:

PATH

我进入了ClassTransformerFromEntityToDTO,发现了这个:

DTOClass dto = ClassTransformerFromEntityToDTO.INSTANCE.apply(entityQueryResult);

这个......实现的东西是这样的:

public enum ClassTransfomerFromEntityToDTO implements  Function<EntityClass,DTO Class> ) {
INSTANCE;

    @Override
    public DTOClass apply(EntityClass entityInstance) {
        /*Code to transform the Entity to DTO and the return*/
    }
}

我在经典&#34;每个人在项目开始时逃离&#34;,没有人知道为什么这个或这是什么(最聪明的人告诉我,也许它有与Spring有关),所以,我有两个主要问题(可以在同一方面或多或少地回答):

1)这是什么?使用具有函数的枚举进行转换的重点是什么?

2)这是什么意思?为什么我只能用一个函数创建一个类并忘记这个魔法?

2 个答案:

答案 0 :(得分:1)

不确定这里有多少答案......而且我正在添加一个答案,用我看过的一些代码来说明我的想法,但是你有可怕的。我其实看起来很像。我的猜测是,这些代码实际上在Spring之前。它被用作某种单身人士。

我见过这样的代码,情况更糟:

public interface DTO {
    find(Object args)
}
public class ConcreteDTO1 implements DTO {
   ...
}
public class ConcreteDTO2 implements DTO {
   ...
}
public enum DTOType {

  CONCRETE_DTO1(new ConcreteDTO1(someArgs)),
  CONCRETE_DTO2(new ConcreteDTO2(someOtherArgs))

  private DTO dto;
  public DTOType(DTO dto) {
    this.dto = dto;
  }

  public DTO dto() {
    return dto;
  }
}

然后基本上通过枚举类型访问DTO:

DTOType.CONCRETE_DTO1.dto().find(args);

所以每个试图抓住DTO的人都会通过枚举来访问它。使用Spring,您不需要任何这些。 IoC容器是为了避免这种无意义,这就是为什么我的猜测是它在Spring之前,当Spring不存在时,应用程序的一些古老版本。但是,无论Spring是否已经在应用程序中,都可能会有人做这些事情。 对于你想要做的那种东西,你最好使用访客模式。以下是来自不同答案的示例:passing different type of objects dynamically on same method

答案 1 :(得分:1)

是我。从未来。

原来这个构造是a propossed Singleton Implementation,至少在&#34; Effective Java 2nd edition&#34;。

所以,是的,Ulise的猜测很有针对性。