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

オブジェクト指向設計 依存関係の管理

オブジェクト指向シリーズ。読みにくい本が多い中でオブジェクト指向設計実践ガイドは勉強になるなー。 Contents1 依存関係の管理1.1 メモ1.2 実際のコーディング上のコツ1.3 感想 依存関係 …

no image

アプリケーションアーキテクチャについて 〜ドメインモデルに関して〜

前回のトランザクションスクリプトパターンの反省から 今回はいわゆるドメインモデルの具体例に関して。 ドメイン駆動型設計には以下のような特徴があります。 大きく、アプリケーションの構成を以下のように分け …

no image

ここ1年ぐらいで再確認したネタなど

今の現場では比較的、いわゆるモダンな環境で開発をしていることもあり、非常に勉強になります。 今の現場に入る前に10年近くはPHPをやっていますが、まだまだ知らないこと(といいますか新しいことがふえてき …

no image

キャッシュの使い所とメリデメに関して(主に一覧系の処理に関して)

現在のプロジェクトがかなりの規模のECサイトになるため、正確性とパフォーマンスのトレードオフなどが先日議題にあがりました。 完全なトレードオフではないのかもしれませんが、比較的あちらをたてればこちらが …

アーカイブ