広告↓ 広告↑

【Unity?】ロジックを独立させる。乱数クラスを例とした依存関係逆転の法則の適用について

Tags: Unity
Categories: ゲーム開発

はじめに

趣味でボードゲームやパズルゲームを主としたゲーム開発をしていますが、もくもく会で「Unityを使用しない形でロジック部分を作成して、Unityは画面に表示したりユーザーの操作を受け取るの役割で作成してます」と話をしたら、「乱数のクラスとかどうしてますか?」と質問頂いたので回答がてら記事にします。

前提

基本的に下図のパッケージ構成でゲームを作成しています。

MyGame:MVC、MVPで言う所のM担当。ゲームの要素やルールと行ったロジック部分を管理します。

MyGameforUnity:MVCで言う所のVC、MVPで言う所VP担当。実際に作成する際はVとC、VとPを分割しますが今回は省略します。

で、基本的にMyGameの部分はピュアなC#で作るようにしています。

質問

RandomとかMathのクラスを使用する場合にどうしているのか。.Netのライブラリで代用しているのか。

.Netのライブラリで代用?

回答

依存関係逆転の法則を適用して解決してます。

依存関係逆転の法則について

SOLID原則の一つ。

A.上位のモジュールは下位のモジュールに依存してはならない。どちらのモジュールも「抽象」に依存すべきである。

B.「抽象」は実装の詳細に依存してはならない。実装の詳細が「抽象」に依存すべきである。

著:ロバート・C・マーチン 訳:瀬谷啓介 アジャイルソフトウェア開発の奥義

詳細は引用元の本を読んでください。

依存関係逆転の法則を適用する

依存関係逆転の法則を適用せずにUnityのRandomクラスを使用する場合

依存関係逆転の法則を適用しない場合

依存関係逆転の法則を適用しない場合、Unityが無いと動かないと言うことで前提のパッケージ構成通りに作れません。

依存関係逆転の法則を適用する場合

依存関係逆転の法則を適用する場合

まずは、ロジック(domain)が必要とする乱数のインターフェースを定義します。

そして、インターフェースの実装クラスをUnityや.NetのRandomクラスを利用して実装します。

実行環境に応じて依存性の注入(DI)しています。

と言った感じで解決しています。