- 1 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:29:06.316 ID:VNIpwvOf0
- アップデートしたときにセーブデータの構造変わることあるけど
そのときに前バージョンの構造から今バージョンの構造に変換することが考えられるけど
これがアップデートのたびに続くとこの変換コードが膨大になっていくけどどうしたらいいの?
- 2 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:30:55.589 ID:ZZFEALMy0
- なんの話してるんだこいつ
- 3 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:31:44.443 ID:VNIpwvOf0
- 詳しい人いないの?
- 4 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:34:26.539 ID:Rr69cDC30
- 解析部をラップしておけば良かったのに
- 9 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:36:53.468 ID:VNIpwvOf0
- >>4
>>5
どういうこと? - 5 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:34:49.158 ID:nZahV6oNa
- 一発抽象化しておけば?
- 6 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:35:17.189 ID:z5vr0mt50
- そこまで大規模な変更する前に企画の段階で練っておけよ…
- 8 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:36:36.136 ID:VNIpwvOf0
- >>6
長期運営してたら何があるかわからないでしょ - 7 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:36:10.015 ID:IfhlDQ8m0
- まさか全パターンIF文書き下してるのか
- 11 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:37:37.992 ID:VNIpwvOf0
- >>7
クラスごと変えるけど - 10 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:37:06.099 ID:HFlA5baaM
- アダプタ使え
バージョンごとに使うプログラムを切り替えればよかろ - 12 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:38:36.787 ID:VNIpwvOf0
- >>10
クラスを切り替えるけど
プログラムを切り替える?
この変換クラスが膨大になるんだけど - 13 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:38:56.117 ID:KPRclcK/0
- アップデートしたときにセーブデータの構造変えない
- 18 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:42:44.306 ID:VNIpwvOf0
- >>13
大規模プロジェクトになるとそうはいかない - 14 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:39:45.615 ID:HFlA5baaM
- 古典的に言うとアダプタパターンな
どんな形でセーブデータ作ってるのよ - 20 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:43:34.394 ID:VNIpwvOf0
- >>14
セーブデータクラスのオブジェクトをjson形式に相互変換する感じ - 15 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:41:25.466 ID:VNIpwvOf0
- 例えばセーブデータのクラスが
バージョン1
int a
int b
int c↓
バージョン2
int a
int b
int dこうなったとき
バージョン2のセーブデータクラスが必要な上に
a = a
b = b
d = c + 1という処理も必要になるわけだ
- 16 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:42:09.782 ID:VNIpwvOf0
- で、このバージョン2のセーブデータクラスのようなのがバージョンアップでセーブデータ構造が変わるたびに必要になっていく
膨大に
それをどうするかって話 - 17 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:42:15.829 ID:HFlA5baaM
- バイナリデータで保存してんの?
xmlやjsonじゃダメなのか? - 21 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:44:01.387 ID:VNIpwvOf0
- >>17
jsonでセーブしてる - 19 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:43:25.916 ID:Xsd1wN2J0
- その場合は、
int a
int b
int c(未使用)
int d
になるだろうな - 23 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:46:16.703 ID:VNIpwvOf0
- >>19
アップデートのたびに未使用が増えていくじゃんアップデートでバージョン2のセーブデータクラスが
バージョン2
int x
int y
int zのように大規模に変わる可能性もある
- 22 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:44:06.832 ID:HFlA5baaM
- アダプタパターン使えよ
- 25 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:47:23.313 ID:VNIpwvOf0
- >>22
アダプタパターンにしてもクラスは増えていくでしょ - 24 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:46:28.497 ID:9nLvL4/0p
- 変換クラス数が膨大になるって話なら設計レベルの話じゃね?
- 28 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:48:18.479 ID:VNIpwvOf0
- >>24
変換クラスというかセーブデータクラスね
その中で変換をするにしてもデータ構造が変わるたびに新しいクラスを用意する必要がある - 30 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:49:17.019 ID:9nLvL4/0p
- >>28
ロードしなけりゃクラスなんかいくら増えても害にはならないと思うが、どんな問題が発生してるのだ - 40 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:52:41.424 ID:VNIpwvOf0
- >>30
確かにそうだけどセーブデータクラスが膨大になっていく例えば1つのバージョンのセーブデータクラスが100個のクラスファイルで構成されているとすると、100回アップデートでクラス構造が変わったら1万のクラスが生まれることになる
そしてそれが残り続けてしまう - 45 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:54:11.469 ID:r5tbVwtp0
- >>40
何で毎回全部のクラスを更新するんだよ
100回のアップデートだったらせいぜい1000とかだろ - 58 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:59:45.963 ID:VNIpwvOf0
- >>45
まあそうだけど最悪の場合も想定しないと
どっちみち長期運営したら肥大していく - 26 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:47:28.204 ID:Xsd1wN2J0
- 未使用が増えてもいいだろ
- 34 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:50:01.398 ID:VNIpwvOf0
- >>26
それだとすべての構造が変わるような場合、変数が倍になる
そしてそれが繰り返させると膨大になる - 27 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:47:46.076 ID:HFlA5baaM
- なら最初から設計をミスってる
諦めろ - 35 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:50:28.959 ID:VNIpwvOf0
- >>27
大規模の長期運営を想定しないとこの悩みはないだろうなあ - 29 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:49:02.782 ID:S/onuIZtM
- バイト単位で書き込んでるって事?
使わない領域再利用するのは管理大変だし最悪データ壊れて死ぬぞ - 37 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:50:51.628 ID:VNIpwvOf0
- >>29
クラスとjsonの相互変換 - 31 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:49:23.053 ID:IfhlDQ8m0
- まずバージョンアップで頻繁にデータ構造が変わる時点でおかしい
管理できないほど膨大になるって何が起きてるのよw - 42 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:53:10.542 ID:VNIpwvOf0
- >>31
大規模の長期運営をしたことがない人にはこの悩みはわからないだろうなあ - 49 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:54:52.339 ID:IfhlDQ8m0
- >>42
普通大規模化すればするほどデータは柔軟に設計するんだけど…
やっちゃったもんは仕方ないが… - 64 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:02:09.350 ID:VNIpwvOf0
- >>49
その柔軟な設計を今考えているわけで
少なくともセーブデータ構造が変わることはないとか少ないとかいうのは設計でもなんでもない
小規模短期しか想定できない設計 - 32 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:49:24.963 ID:ZD+yGIbf0
- C言語だとセーブデータを構造体にして描き出し、読み込み
C++だとクラスにして丸ごと書き出し、読み込み
だから、描き出し、読み込み部分のソースコードは何も変わらない - 46 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:54:19.328 ID:VNIpwvOf0
- >>32
その構造体のクラスがセーブデータクラスが変わるごとに新しいのが必要になるって話
ちなC#ね - 33 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:49:36.218 ID:Xsd1wN2J0
- 文字列キーのMapつかえば?
- 51 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:55:40.553 ID:VNIpwvOf0
- >>33
どんなセーブ方式にしてもバージョンアップでセーブデータ構造が変わることによって整合性を保つための変換作業は必要になる
セーブデータクラスがいらなくなってもこの変換クラスは必要になるから同じこと - 36 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:50:31.094 ID:Xsd1wN2J0
- そんなに構造を変えないように
本体の方で調整しろよwwww - 53 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:56:32.181 ID:VNIpwvOf0
- >>36
本体の中にこのクラスもあるわけだが - 38 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:50:55.334 ID:r5tbVwtp0
- そりゃ仕方ないだろ
- 39 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:52:25.214 ID:IfhlDQ8m0
- もうその状態なら変換プロセス別に起動するようにすれば?
スマホアプリならしらんけど - 56 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:58:10.322 ID:VNIpwvOf0
- >>39
初めて想定していた案が出たね
PCならセーブデータの変換プログラムを別にするってのも考えた
スマホだとどうするのがいいのか - 60 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:00:04.635 ID:IfhlDQ8m0
- >>56
え、まさかお前会議で
「5chで募集した最強の設計がこれだ!」
って発言するの!? - 62 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:00:55.923 ID:r5tbVwtp0
- >>56
セーブデータの変換プログラムを内蔵すればいいんじゃね? - 41 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:53:06.782 ID:p1oVXROf0
- 膨大になるっていうけど実際古いデータが膨大にあるのは事実なんだからしょうがなくない?
まさか古いデータ切り捨てるわけじゃあるまいし
大きいシステムでそんなにコロコロデータ変わると思えないんだが - 43 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:53:24.512 ID:6H8Rjxtg0
- セーブデータにバージョン持たせれば?
- 57 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:59:03.921 ID:VNIpwvOf0
- >>43
当然持たせる>>44
PCならそれでいいけどスマホアプリだとどうする? - 44 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:53:44.349 ID:9nLvL4/0p
- 俺もそう思う
ちょっと想像つかないが、開発に支障が出るほど肥大化してるならコンバーターを別のプロジェクト(プログラム的な意味でなくて)に分割するのが正しいんだろう - 47 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:54:27.095 ID:r5tbVwtp0
- どうしても増やしたくない場合、「常に直前バージョンからのアップデートのみに対応する」っていう手もある
それ以前のバージョンからの修正は有償サービスとする - 61 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:00:54.051 ID:VNIpwvOf0
- >>47
スマホアプリのような場合しばらくアップデートしない人も出てくるしなあ>>48
ユーザーを失う - 63 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:01:39.173 ID:r5tbVwtp0
- >>61
データを全部サーバー側に持たせておけばマイグレーションで一発だったのになぁ - 48 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:54:49.241 ID:USiS64cj0
- 肥大化してきたら適当に理由を付けてリニューアルすれば良いじゃん
- 50 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:55:29.334 ID:OUYX5pS76
- HTML living standardのバージョンアップに関する考え方を参考にするとか
- 52 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:56:06.192 ID:S1X4qrrG0
- 古すぎる箇所は削除すればいいんだろうけど古いバージョンも完全動作保証しますっていった営業を恨め
- 55 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 09:58:09.544 ID:USiS64cj0
- 素人意見ですまんが、こういうことが起きないようにするのがクラスの役割なのではないの?
- 65 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:02:25.054 ID:9nLvL4/0p
- 変換処理はサーバー側に持たせるとかしか思いつかんなあ
スマホアプリでアップデートはするけどオフラインでしか使えないし、他人とデータ交換もする!とかだとそもそも後方互換性持たせることに無理がある - 66 名前:ひみつの名無しさん 投稿日時:2020/11/23(月) 10:03:12.215 ID:6H8Rjxtg0
- きっと最初は長期運用を深く考えてない設計だったんだなきっと
コメント