这是我甚至不知道如何在谷歌搜索的主题之一(已经尝试过,大部分结果都是针对C#),所以我在这里: 我正在搞乱我们庞大的应用程序,试图开始工作一个全新的DAO /实体/服务/ DTO ...... euh ......的事情。我或多或少地独自离开了,而且,或多或少,我已经了解了一些方法,也许还有一两个方法。
问题在于我从数据库到服务的所有方式,#34; up":
我的问题是"某种程度上"代码就像这样:
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)这是什么意思?为什么我只能用一个函数创建一个类并忘记这个魔法?
答案 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的猜测很有针对性。