getId()およびgetVersion()メソッドなしでrequestFactoryを使用できますか?

StackOverflow https://stackoverflow.com/questions/7340040

  •  27-10-2019
  •  | 
  •  

質問

使用しようとしています RequestFactory 既存のJavaエンティティモデルを使用。私たちのJavaエンティティはすべてaを実装します DomainObject インターフェイスと露出a getObjectId() メソッド(この名前はとして選択されました getId() 曖昧でドメインオブジェクトと競合する可能性があります 実際 モデリングされているドメインからのID。

ServiceLayerDecorator インターフェイスを使用すると、IDおよびバージョンのプロパティルックアップ戦略のカスタマイズが可能です。

public class MyServiceLayerDecorator extends ServiceLayerDecorator {
    @Override
    public Object getId(Object object) {
        DomainObject domainObject = (DomainObject) object;
        return domainObject.getObjectId();
    }
}

ここまでは順調ですね。ただし、このソリューションを展開しようとすると、ランタイムエラーが生成されます。特に、 RequestFactoryInterfaceValidator 不平を言う:

[ERROR] There is no getId() method in type com.mycompany.server.MyEntity

その後:

[ERROR] Type type com.mycompany.client.MyEntityProxy was previously marked as bad
[ERROR] The type com.mycompany.client.MyEntityProxy did not pass RequestFactory validation
[ERROR] Unexpected error
com.google.web.bindery.requestfactory.server.UnexpectedException: The type com.mycompany.client.MyEntityProxy did not pass RequestFactory validation
    at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die(ServiceLayerDecorator.java:212) ~[gwt-servlet.jar:na]

私の質問は - なぜそうですか ServiceLayerDecorator カスタマイズされたIDおよびバージョンルックアップ戦略の場合 RequestFactoryInterfaceValidator の慣習を強調しています getId()getVersion()?

私はオーバーライドできると思います ServiceLayerDecorator.resolveClass() 「毒された」プロキシクラスを無視するには、この時点でフレームワークと戦っているようです...

役に立ちましたか?

解決

いくつかのオプション、そのうちのいくつかはすでに言及されています:

  • Locator. 。 ProJ全体の単一のロケーター、または少なくとも同様のキータイプを持つ関連するオブジェクトのグループのために作成するのが好きです。 getID()コールは、domainobject.getObjectId()メソッドを呼び出し、その値を返すことができます。に注意してください getDomainType() メソッドは現在未使用であり、nullを返すか、例外をスローできます。
  • ValueProxy. 。オブジェクトをRFがエンティティとして理解できるものにマッピングする代わりに、それらをプレーンバリューオブジェクトにマッピングします - IDやバージョンは必要ありません。 RFは、特にサーバーに冗長データを送信することを避けることに関して、できることができる多くの賢いことを見逃しています。
  • ServiceLayerDecorator. 。これは2.4以前に機能しましたが、現在進行中の注釈処理では、それがあなたのためにいくつかの仕事をしようとするので、それはあまりうまく機能しません。 Servicelayerdecoratorはここ数か月で多くの歯を失ったようです。理論的には、Gettersを再構築して永続メカニズムに直接通信することができますが、注釈処理がコードを検証した今、それはオプションではなくなりました。 。

このすべての大きな問題は、RequestFactoryが単一の問題を解決し、それをうまく解決するように設計されていることです。開発者がマッピングされたPojosを永続的なメカニズムに使用できるようにし、特定の規則に従って、クライアントからのオブジェクトを参照して、追加のコードを書くことを避けないようにすることです。または構成。

その結果、それはそれ自体の問題をかなりうまく解決し、他の多くの問題/ユースケースに適していることになります。あなたはそれが価値がないことに気付くかもしれません:もしそうなら、あなたが考慮するかもしれないいくつかの考えは次のとおりです:

  • RPC。それはあまり完璧ではありませんが、それは多くのために大丈夫な仕事をします。
  • AutoBeans(RFが基づいている)は、ワイヤー上にデータを送信してアプリに入れるための非常に高速で軽量な方法です。 RFが行ったように、独自のラッパーを構築することができ、ユースケースだけを解決しようとしている問題をスリムにします。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top