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

ステートパターンについて

トランザクション系のデータの場合、スタータスの遷移がキーになることが多く、仕様の把握に関してこの部分の理解が重要です。 今まで、ステータスの遷移に関してはExcelを使って表現していたことが多かったの …

no image

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

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

no image

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

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

no image

オブジェクト指向 ドメインモデル

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にドメインモデルの考え方について。 Contents1 ドメインモデルの考え方1.1 要点1.2 感想 ドメインモデルの考え …

アーカイブ