私はJavaで基本的なボードゲームを実装していますが、解決の長所と短所を判断するのに苦労しています。私はすでにコマンドパターンを使用してゲームの元に戻す機能を有効にすることに成功しており、元々はゲームモデルオブジェクトのセット全体をシリアル化することでゲームの保存/読み込みを実装することを目的としていました。
しかし、このゲームはランダムな要素がなく、常に同じ状態で初期化されるボードゲームであるため、コマンドスタックを含むオブジェクトとその時点までのコマンド自体をシリアル化するだけで、保存/読み込み機能を実装できることに気付きました。次に、ゲームを保存された位置に戻すために、すべてのコマンドを再実行します。
私のコマンドはボードのタイルやピースを形成するオブジェクトインスタンスへの参照を保持しているため、現在の設計ではこれを行うことができません。これはOOのベストプラクティスであると私は信じています。つまり、これらのモデルオブジェクトもシリアル化する必要があり、コマンドをシリアル化して実行するという目的が失われます。私の質問は、コマンドにボードタイルの整数位置を保持させるだけでは、悪い習慣と見なされるかどうかです。
コマンドクラスコードの関連部分:
private GameController controller;
private Tile sourceTile;
private Tile[] route;
public MoveCommand(GameController controller, Tile sourceTile, Tile... route) {
this.controller = controller;
this.sourceTile = sourceTile;
this.route = route;
}
@Override
public void execute() {
controller.executeMove(sourceTile, route);
}
Tile参照を、TileLocationと呼ばれる新しいシリアル化可能なクラスへの参照、またはボードがタイルを見つけられるようにXとYの整数を保持するその効果のあるものに変更するつもりです。