2016-05-03 9 views
0

これは私がGoogleで検索する方法を知らない(既に試した結果、ほとんどの結果がC#用だったので)私はここに行きます: 私は巨大なアプリケーションを使いこなしていますまったく新しいDAO/Entity/Service/DTO .. euh ... thingを動かす。私は多かれ少なかれ自分のことをやり続けてきましたが、やはり多かれ少なかれ、私はいくつかのやり方を理解するようになりました。エンティティを使用したJ2EEアプリケーションでのDTO変換へのエンティティ

事は、私はすべて得たことを、DBからサービスまで、「アップ」方法です:

  • 私は、エンティティクラスに保存されたクエリを実行DAOクラスを得ました。それを実行した後、値とともにEntityを返します。
  • サービスはエンティティを受信し、何らかの形でエンティティをDTOに変換し、いつでも必要なときに戻します。

私の問題は、コードは次のようになり、 "何とか" のものである:

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

私はClassTransformerFromEntityToDTOに行き、この発見:

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*/ 
    } 
} 

クラスこのことを...もの、実装は、これは:

package com. google .common . base; 

import com. google .common . annotations. GwtCompatible ; 
import javax. annotation .Nullable ; 

@GwtCompatible 
public abstract interface Function <F , T > 
{ 
    @Nullable 
    public abstract T apply (@Nullable F paramF) ; 

    public abstract boolean equals (@Nullable Object paramObject) ; 
} 

私は私ですn "プロジェクトの始めにどこにいたのか誰もが逃げ出した"という古典は誰も知らなかったし、これが何であるか(これは賢明な人が春と関係があったかもしれないと私に言った)質問(同じ側で多かれ少なかれ回答できます):

1)これはなんですか?列挙型を使用して変換を行うポイントは何ですか?

2)これは何がポイントですか?なぜ私はただ一つの関数でクラスを作り、この魔法を忘れることができますか?

答えて

1

ここには多くの回答がありますか...と私は思ったいくつかのコードで私の考えを説明する答えを追加していますが、あなたは恐ろしいです。私は実際に似たようなものに見えます。私の推測では、そのコードは実際に春に先行しているということです。それは何らかのシングルトンとして使われています。

私は悪いことである。このようなコードを、見てきました:

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のホールドを取得しようとしていますenumを介してアクセスします。 Springでは、その必要はありません。 IoCコンテナは、この種のナンセンスを避けるためのものです。そのため、Springが存在しなかったときの古いバージョンのアプリから、Springに先行していると思います。しかし、Springがすでにアプリに入っているかどうかにかかわらず、誰かがそうしたことをするために配線されていた可能性があります。 あなたがしようとしているようなものについては、ビジターパターンの方がよいでしょう。ここに別の答えの例があります:passing different type of objects dynamically on same method

+0

私は答えに「恐ろしい」「ナンセンス」「古代」という言葉が含まれているのが好きです...私は(何らかの形で)擬似シングルトンのことを理解することはできますが...私のコードでは、 (新しいDTO、DTOのものを埋め、DTOを返す)。もしあなたが複数のインスタンスを必要としないなら、関数を静的にしてください。シングルトンを必要とするなら、地獄を作りましょう、シングルトンを作るのですが...これは... "私はこれを" X -Files "フォルダを作業中に... – Neuromante

1

私です。未来から。

「有効なJavaの第2版」では、この構成がa propossed Singleton Implementationであることが判明しました。

そう、ええ、ウリゼの推測はよく指向していました。

関連する問題