前提・実現したいこと
Javaでゲームプログラムを書いています。
セーブ機構を作る際、Serializableを利用していたのですが、後でプログラムを拡張するときに、どうすればよいか、悩むようになりました。
どのように実装するのがベストでしょうか?
プレイヤーデータを保持する既存の Member クラスとSerializableをファイルに指定された名前で保存するStorageクラスがあります。問題は、Memberクラスに新しい機能を追加しようとしてフィールドを追加すると、既存のセーブファイルと互換性がなくなってしまうところです。
ちなみに、サーバー側の話なので、難読化は必要ありません
プレイヤーデータの情報を保持する既存の Member クラス
Java
1 private final UUID uuid; 2 private String name; 3 private UUID faction; 4 private Set<String> permissions; 5 private List<String> unread = new ArrayList<>(); 6 private List<String> messages = new ArrayList<>(); 7 private Set<String> temp; 8 private boolean registered; 9 10 /** 11 * 指定された情報でメンバーを新規作成します. 12 * 13 * @param uuid 固有識別子 14 * @param name 名前 15 * @param faction 派閥. {@code null} 化 16 * @param permissions 権限一覧 17 */ 18 public Member(UUID uuid, String name, UUID faction, Set<String> permissions) { 19 this.uuid = uuid; 20 this.name = name; 21 this.faction = faction; 22 this.permissions = permissions; 23 discardPermissionChanges(); 24 } 25 26 /** 27 * メンバーのデータをセーブします. 28 * 通常時は自動的にセーブされるため、このメソッドを呼ぶ必要はありません. 29 * 30 * @param member セーブするメンバー 31 */ 32 public static void save(Member member) { 33 storage.save(member.getUUID().toString(), member); 34 } 35 36 /** 37 * 現在有効な全てのメンバーのデータをセーブします. 38 */ 39 public static void saveAll() { 40 activeMembers.forEach(Member::save); 41 } 42 43 ...
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。