Laravel公式を読み解く 11. Laravel 5.5 契約(コントラクト)
・「契約」(コントラクト)とは
インターフェイス。Laravelのコアコンポーネントで利用されている関数を定義している。中身はhttps://github.com/illuminate/contracts。
要は、Laravel内のいろいろなクラスのテンプレート。
・契約 VS ファサード
同じような機能だけど用途が違う?
・契約を使うメリット
①関数のタイプヒントをクラスではなく契約にすることで、疎結合なコードを実現できる。
解説:Laravelは様々なパッケージで構成されるが、パッケージベンダーの具象キャッシュクラスに依存すると(利用先のクラスに注入すると)、パッケージのAPI(インターフェイス)が変更されたときに、利用先のクラスも変更しないといけなくなる。
利用先のクラスは、鍵穴ではなく、がば穴であるべき。(=多くを知りすぎてはいけない)
②単純である
Laravelのサービスは全てシンプルなインターフェイスの中で適切に定義されている。よって、それらが実装された各機能も簡単に理解できる。
・契約の使用方法
多くのタイプのクラス(コントローラ、イベントリスナ、フィルター、キュージョブ、ルートクロージャ)がサービスコンテナを利用して依存解決されている。(多分どのインターフェースが呼ばれたらどのクラスをインスタンス化するのかがサービスコンテナに書かれている?)利用先のクラスでタイプヒントすれば使える。