2017-11-20 8 views
0

JS、HTML5ウェブソケット、Javaをバックエンドとして使用してWebゲームを開発しています。私はGsonを使用してjsonを直列化および逆直列化しています。Gson - アクションごとに複数のクラスを避ける

Iは、以下のJSON文字列を生成するために2つのクラス、メッセージおよびデータを作った:

{ "メッセージ":setupGame、 "データ":{ "幅":800、高さ:800、 "ユーザ名" :player1、 "ボール":ヌル}

Messageクラス:

public class Message { 

private String message; 
private Data data; 

public Message(String message, Data data) { 
    this.message = message; 
    this.data = data; 
} 

データクラス:

public class Data { 

private int width; 
private int height; 
private String username; 
private Ball ball; 

public Data(int width, int height, String username) { 
    this.width = width; 
    this.height = height; 
    this.username = username; 
} 

public Data(Ball ball) { 
    this.ball = ball; 
} 

setupGameのjson文字列でわかるように、 "Ball"は期待どおりにnullです。私は、下記のJSON文字列を達成したいと思います:

セットアップゲーム:

{ "メッセージ":setupGame、 "データ":{ "幅":800、高さ:800、 "ユーザ名":player1 }

ゲーム更新:

{ "メッセージ":gameUpdate、 "ボール":{ "X":600、 "Y":400}}

私は、それぞれのアクションに対して2つのクラス、例えばSetupGameMessage、SetupGameData、GameUpdateMessage、GameUpdateDataを作成しようと考えていました。しかし、これは私が必要とするすべてのjson文字列のための10以上のクラスを作成する必要があります。

コードをよりメンテナンスし、すべての個別のクラス(すべての単一アクションでメッセージとデータ)を防ぐために、これを行うより良い方法があるのだろうかと思います。

答えて

1

厳密に型指定されていないJavaScriptのような言語のコンシューマの場合は、「int code; String payload」のタプルだけで汎用のRequest/Responseオブジェクトを作成し、サービス層のPOJOを直列化しますJSON文字列に変換し、それを 'ペイロード'に埋め込みます。

これはちょっとハッキリですが、私は通常、特定のエンドポイントごとに特定の型指定のリクエスト/レスポンスのペアを作成するように努力しています。これは単体テストを容易にし、「すべてのエンドポイントのためのすべてのもの」を作成するPOJOを作成しようとする問題を回避します。これはおそらく本当に悪い考えです。

googleのAutoValue projectをチェックしてください - あなたがクラスの束を作っているときに、JavaからPOJOを書くのはほとんど苦労します。

関連する問題