0

データストア操作に objectify を使用する新しいプロジェクトに Google Guice を統合することを検討していました

オブジェクト化サービスの次の基本クラスを検討してください

public abstract class OfyService<T> {

    private Class<T> clazz;

    public OfyService(Class<T> clazz) {
        this.clazz = clazz;
    }
    ... service methods 
}

そして、以下はユーザーエンティティサービスクラスです

public final class UserService extends OfyService<User> {

    static {
        factory().register(User.class);
    }

    private UserService() {
        super(User.class);
    }

    public static UserService getInstance() {
        return UserServiceSingleton._userService;
    }

    private static class UserServiceSingleton {
        public static final UserService _userService = new UserService();
    }
}

私のすべてのエンティティ サービス クラスは、このパターンに従います。それで、Google Guiceがそれを改善できるかどうか、または現在の実装が良いかどうかを確認していましたか?

私の場合、Guiceモジュールが依存関係を適切に処理できる場合、それが私の実装にどのように適用されるかを誰かが説明できますか?

4

1 に答える 1

0

まず Objectify に関連して、Objectify のベスト プラクティスをご覧になりましたか。どうやら、彼らはより簡単なアプローチを提示するかもしれません。

ObjectifyService static ofy() メソッドを使用する代わりに、独自のメソッドを使用してください。

public class OfyService {
   static {
      factory().register(Thing.class);
      factory().register(OtherThing.class);
      ...etc
   }

   public static Objectify ofy() {
      return ObjectifyService.ofy();
   }

   public static ObjectifyFactory factory() {
      return ObjectifyService.factory();
   }
}

コードに、独自の静的 ofy() をインポートします。

import static com.yourcode.OfyService.ofy;
Thing th = ofy().load().type(Thing).id(123L).now();

このようにして、エンティティの登録は一度だけ行われ、常に必要になる前に行われます。

起動時のパフォーマンスに関しては、インスタンス クラスと使用されるエンティティの複雑さに依存します。通常、最下位のインスタンス クラスでも、最大で約 20 のエンティティ タイプを 1 秒以内に作成できます。ほとんどの場合、何百ものエンティティ タイプがある場合にのみ、別の方法で調査することが理にかなっている可能性があります。

ギースについて。提供されたコードとどのように関連するかは明らかではありませんが、いくつか提案します。

  • 通常、Entity クラスを注入すると DI の頭痛の種になります。そのため、実際に注入されたクラスを取得する必要がある場合は、エンティティからファクトリを使用したり、使用したりすることを避けたいと思うでしょう。
  • データコントローラー、または UserService (現在の形式ではない) などについては、通常、依存関係を注入するか、注入された依存関係として使用するための合理的な候補になります。
于 2013-09-14T19:30:25.030 に答える