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

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

今回は場合分けによる変更コストとオブジェクト指向のメリットについてです。 例えば給付金が発生して、その金額を死亡時、退職時、通常時で場合分けするとき、if-elseで書けば下記のようになります。 [c …

no image

デザインパターンの使い所

昔からデザインパターンは勉強しておりましたが、使い所などで悩むことが多かったです。 現在の現場でいろいろなパターンを見させていただき、なんとなくではありますが使い所がわかったので、まとめてみようと思い …

no image

値オブジェクトやファーストコレクションなどについて

以前から言葉としては知っていたけれど、オブジェクト思考の重要な概念に関して。 Contents1 値オブジェクト(Value Object)2 ファーストコレクション(コレクションオブジェクト) 値オ …

no image

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

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

no image

abstract,interface,traitなどについて

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

アーカイブ