0

AppEngine (Java) と GWT を使用してアプリを設計しています。クライアント (GWT) とサーバー (AppEngine) の両方が作用するオブジェクトを表すクラスがあります。現在、私は AppEngine クラス (サーバー側のすべての情報を含む) と、クライアントが使用する (そして RPC 呼び出し間で渡される) 共有ディレクトリ内のクラスを持っています。ここで、2 つの間で変換し、サーバーとクライアントで必要なメソッドを再現するメソッドが必要です。これは頭​​痛の種であり、クラスがより複雑になるとバグが発生しやすくなります。

共有クラスを 1 つだけ作成しなかった理由は、サーバーのロジック、メソッド、および属性の一部をクライアントに公開したくなかったからです。しかし、GWT がコンパイルされると、コンパイルされたコードから未使用のメソッドと属性が削除されることを読んでいました。これは本当ですか?クライアントに表示されたくないコードは保護されますか? 注意すべき落とし穴はありますか? 属性は名前を難読化するので、あまり心配する必要はありません (私はそう思います)。サーバー データが RPC 呼び出しでクライアントに送信されないように、transient キーワードを使用できることはわかっています。

最良の方法は、GWTコンパイラーがこのメソッドをコンパイルしてはならないことを知らせるメソッドに付けることができる注釈です。これにより、コンパイルされたjavascriptに決して組み込まれないことがわかります。

最後に、コードを分離したままにしておくと、このような場合のベスト プラクティスはありますか?

4

2 に答える 2

0

あなたの質問を正しく理解できれば、それは良い設計ではないと言えます。共有ディレクトリ内のシリアル化されたオブジェクトは純粋な POJO である必要があり、これらのクラスにビジネス ロジックを混在させないでください。

于 2012-11-02T10:46:02.793 に答える
0

私の問題をほぼ解決する1つの回避策を見つけました。

コードのサーバー コンポーネントを呼び出すクラスがある場合、GWT コンパイルがクラッシュします。これは、そのクラス (com.myproject.server.Class1 など) にアクセスできないためです。gwt.xml ファイル (こちらhttp://code.google.com/p/google-web-toolkit-doc-1-5/wiki/DevGuideModuleXmlを参照) で GWT のパッケージ実装をオーバーライドし、com を作成できます。 myproject.client.com.myproject.server.Class1 呼び出されるメソッドを実装するが、null を返すことができるクラス。このようにして、GWT はコンパイル可能なリンクするクラスを持ちます。GWT コンパイルの後半では、GWT で呼び出されることは (願わくば) 決してないため、このクラス/メソッドをドロップする必要があります。

これはおそらくかなりハックな回避策ですが、慎重に行えばうまくいく可能性があります。

于 2012-11-02T13:11:09.403 に答える