Laravel: Facade vs Contract

自分の言葉で言語化してメモ

Facade vs Contract

  • Facade と Contract はどちらも Laravel のコア機能を使う為の方法である

Facade

  • what
    • Laravelのコア機能をサービスコンテナを介さずに利用できる静的なインターフェース
  • メリット
    • サービスコンテナを意識することなくサービスに簡単にアクセスできる
  • デメリット
    • インジェクション(コンストラクタインジェクションまたはメソッドインジェクション)なしで利用できてしまう為、依存性の管理が難しくなり、テストが困難になる

※とはいえ、Facade も Laravel の内部でサービスコンテナに登録されてる
See: \Illuminate\Foundation\Application::registerCoreContainerAliases

Contract

  • what
    • Laravelのコア機能のインターフェース
    • 開発者は、ServiceProviderでContract(Interface)と実装クラスを明示的にbindする事で、サービスコンテナ経由でコア機能を利用する事ができる
  • メリット
    • 依存性の注入ができる為、疎結合になる
    • テストがしやすくなる
  • デメリット
    • サービスコンテナでのbindが必要

用語

Contract vs Interface

Laravelにおいて Contract(契約) という用語は、サービスコンテナに登録するために使用される Interface を指す

  • Contract (契約)
    • Laravelのコア機能のInterface
    • 言い換えると、サービスコンテナに登録するサービスのInterface