プログラミング詳しい人ちょっときてえええええええええええええええええええええええええええええ

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
きっと最初は長期運用を深く考えてない設計だったんだなきっと

コメント

タイトルとURLをコピーしました