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

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

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

no image

オブジェクト指向設計 ダックタイピング

オブジェクト指向シリーズ。ダックタイピング・・読む前は名前は聞いたことあるような気がする・・程度で細かいことは何一つわからない状態でした。今回具体的なコード例があった分イメージを何とかつかむことはでき …

no image

オブジェクト指向 アプリケーション層に関して

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にアプリケーション層(以下AP層)。MVCモデルでいうところのコントローラーに近い?)の考え方について。 Contents1 …

no image

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

前回のエントリーのように、データとロジックを一体で考えるのは、処理状の有効性のみならず、よりユーザー側に近い処理をかくということにもつながります。 日付の問題に関してもintやshortよりはLoca …

no image

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

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

アーカイブ