unity1week お題「あつめる」に参加しました

概要

今回はsolid原則を意識したコードと、zenjectの使い方習得にフォーカスを当てて参加しました。
作ったゲームはこちら。

Golf | フリーゲーム投稿サイト unityroom

依存性逆転の法則を適用してみる

依存性逆転の法則を適用していないコード

プレイヤーオブジェクトを動かすコードを書いてみます。

f:id:coffee_ryo:20190707213138p:plain (ちょっとumlの線があってるか不安です..)

PlayerControllerというクラスを、処理の起点としました。
PlayerControllerはPlayerMoverクラスをメンバとして持ち、 PlayerMoverの処理を呼び出します。
PlayerControllerとPlayerMoverは別の名前空間に置きました。
(PlayerControllerはMono、PlayerMoverはPure)

処理の流れ・・・Mono→Pure
依存の向き・・・Mono→Pure

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

依存の向きをPure→Monoへ変更させてみます。

「抽象に依存させる」ために、interfaceを切って依存させてみました。

f:id:coffee_ryo:20190707213147p:plain

IPlayerMoverインターフェースを作りました。
PlayerControllerをIPlayerMoverインターフェースに依存させます。
IPlayerMoverインターフェースは、Monoに置きました。Pureに置いてしまうと、パッケージ間で見たときの依存の向きを逆転させられません。
IPlayerMoverの実装はPlayerMoverに任せました。

インターフェースに対してどの実装を使う?

今回はDIを使って解決しました。(zenject使った)