アカデメイア実験室のラボノートには勉強したことのメモを書いていきます。
目標はUnity Learnで3Dを学んで面白そうな何か作ってみることです(雑)
最終的には記事にも価値が出るようなものにしたいですが、何しろ不慣れなので、当面は行動記録として「投稿すること」を優先しようと思います。
こうしたほうがいいぞ!とかあればTwitterで絡んでください。
今日の内容は3DGameを作る(C#編7)です
今回は「設定ファイルを作ろう」です。
お疲れ様です。
以前、迷路をいじる時に共通する処理を基盤とする抽象クラスを作りました[リンク]。
抽象クラスを使って作成した個々の迷路編集クラスの中で何度か頻出する処理をいろいろなクラスで使いまわしたい場合には、どうしたらよいでしょうか?
やりたいこと
抽象クラスは「迷路になんかする」クラスで、これを継承する基礎的な処理のうちいくつかを、「迷路になんかする」色々な具体的なクラスで使いまわしたい。
こういう場合の通常の原則は下記の2通りかと思います。
A. 使いまわす処理をルール非依存の「utils」に出して、ツールとして使いまわす。
B. 抽象クラス自体に処理を搭載する。
しかし、今回は単純にはいきませんでした。
今回に適用しようとしたときの問題点
A. 使いまわす処理をルール非依存の「utils」に出して、ツールとして使いまわす。
→迷路の処理はこうします、というルール(「入力迷路は一旦壁は1、通路が0に直す」とか、「処理中はマスクが-1、未処理は0、処理済みが1以上」とか)を抽象クラスに統一することで暗黙に定めているため、utilsに出してしまうとルールの統一が(かなり意識しないと)できなくなる。
B. 抽象クラス自体に処理を搭載する。
→たしかに何度か使いはするのですが、今回の基礎的な処理は「入出力」とか「壁判定」レベルの一般的な処理ではないため全く必要でないクラスも多く、抽象クラスで実装するには処理が具体的過ぎます。
解決方法
責任の分離:処理の構造を定める抽象クラスとは別に、迷路のルールを定める辞書を作り、これを抽象クラスや迷路関連処理で呼ぶ。
これで単一責任が守られます。
分ければ分けるほどファイル増えてくるのできちんとdocumentで管理しなくては......
今日はここまで。