RustとWebAssemblyによるゲーム開発 ch.3
の3章を読んだので気になった点をまとめます
3章では、実際にゲームループを実装しました
その際コードのまとめ方として階層アーキテクチャに則りました
コード沢山書いて楽しかったですが、あまり疑問に思うところがなかったのが残念
rustやwasmやブラウザやゲーム開発に詳しい(くなくても)みなさま〜
まさかり〜(くれ)
復習
ok()
とok_or_else()
Result → Option
はok()
Option → Result
はok_or_else()
ok()
は有用なエラー情報が捨てられる = エラー処理面倒な時に便利
ok_or_else()
はエラーメッセージ沢山書く必要がある = 有用なエラー情報を使える
気づいた事
階層アーキテクチャのめっちゃ基本
階層アーキテクチャの説明でよくapiを多重に分けて実装して、各層が一個下のレイヤーにのみ依存させることでリサイクルしやすい構造になる、みたいなのを見るんですが、あんまりこの説明にピンときていませんでした
これって要は、
例えば、この本の3章ではbrowser
engine
game
の3層に分けて実装した
それぞれのレイヤーは本来、異なる人たちが実装していると考える
-
browser
を実装する人たちはブラウザapiの便利なラッパーやら痒いとこに手が届くようなapiを提供してくれる -
engine
を実装する人たちはbrowser
モジュールが提供する便利な機能を利用して、ゲームを作る際に必要なapiを作る -
game
を実装する人たちは、実際に自分たちが作るゲールの実装をする
これらの実装を一人でというか、最も高いレイヤーであるゲームを作ると言う目的のためにbrowser
engine
game
を実装してゆくのがレイヤーアーキテクチャ
ってことですよね?
これの嬉しい点を考えてみました パッと思いつくのは
依存関係がわかりやすいから変更を加える際に楽できる
そして、この考え方に階層アーキテクチャと名前をつける事で、実装の方針を共有することが楽になる
この本のような小さいプログラムならまだしも、これがもっと大規模に、そして複数人で実装、ってなってくると旨みが増してきそうですね
あと、階層アーキテクチャの説明でこんなことが書かれていました
コードを、モジュールや関数や構造体などの名前を持った言語機能に注捨することで、記憶しておかなければならない情報の量を減らすことができる。このおかげで、正しく設計されたシステムは、楽にプログラムできる。一方で、抽象化しすぎると、プログラムの詳細を全て覚える代わりに、抽象化したものを全て記憶することになる。ちょうどいい抽象化を心がけよう。
本当にその通り 3章で一番大事な部分だなと思いました
Discussion