skillup

技術ブログ

アーキテクト設計全般

DIについての再考察

投稿日:2022年4月23日 更新日:

DIに関しては今までも何度か触れましたが、最終的には環境の差異を吸収できるなどが一番のポイントかと。

サンプルソース

https://github.com/umanari145/effector

上記のソースでは主に郵便番号を呼ぶときにローカルだとJSON、それ以降の環境ではAPIをよぶなんてやってますが、

で、テストを書いている時もローカルクラスを使うか、APIを使うかを自動で読み込んで欲しい時なんてのがあります。

そんな時には、以下のように書けば動きます。

effector/tests/Service/PostServiceTest.php

 

これはPostServiceの中にAddressRepositoryInterfaceがあり、

AddressRepositoryInterface
→ローカル時はLocalAddressRepository
→開発時はApiAddressRepository

といった構成。

コード本体は以下のようにDIコンテナでAddressRespositoryInterfaceを使い分けており、環境によって実装クラスが異なる。
effector/app/Providers/AddressServiceProvider.php

DIで大事なことは以下2点かと思います。

  • 環境ごとに呼ばれるクラスが異なる
  • それに関連する依存クラスも自動的に紐付けがされる

わかりやすい参考サイトがあったのでリンクを。

【Laravel】サービスコンテナとは?2つの強力な武器を持ったインスタンス化マシーン。簡単に解説。

リポジトリパターンと Laravel アプリケーションでのディレクトリ構造

↑非常にわかりやすいローカルとAPIの差異に関して。(ほぼサンプルと同じパターン)

-アーキテクト設計全般

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

オブジェクト指向について その1

ちょっと最近、仕事でソースの書き方がいい加減になってきたのでオブジェクト指向について考え方を再確認しようと思います。 参考文献 SoftWareDesign 2015年9月号 何も考えずにプログラムを …

no image

アプリケーションアーキテクチャについて 〜既存のMVCに関して〜

今回はアプリケーションのルーター以降のアーキテクチャに関して。主にMVCなどについて説明したいと思います。 Contents1 MVC(Model,Controller,View)1.1 トランザクシ …

no image

Facadeパターンについて(Laravelを題材に)

LaravelのFacadeについて自作する機会があったので、メモ。 デザインパターンの一種かと思います。 Contents1 サンプル2 使い所3 メリット4 デメリット5 参考リンク サンプル h …

no image

自動テストをやる上で今まで障害だったこと

自動テストについて、考え方自体は5年以上前から知っていましたが、プロジェクトで実際に使われているのを見たのは今年4月になってからでした・・・ 自動テスト完備なんて昔は夢物語だと思ってたんですけどね・・ …

no image

abstract,interface,traitなどについて

昔はようわからなかったabstract(継承全般)、interface、traitの使い分けなどについて。 今の現場でいろいろと考えることがあり、自分なりにいろんな方の知見を共有できたので、メモしてお …

アーカイブ