2016-07-06 7 views
1

背景親クラスとの依存性注入の実装?

私はLaravel/symfonyのに飛び込む前に、私自身の教育のためのスクラッチprimariltyから合理的に便利なMVCフレームワークを設計しようとしています。

私は依存性注入を実装しようとしています。将来、このフレームワークを拡張する予定であり、モジュール化して保守可能なものにしたいと考えています。 https://github.com/JethroHazelhurst/psr-4-mvc

(注:コントローラ/ルーティングシステムはハード簡単にするために符号化される)

ここに私のフローチャートはMVCフレームワークは依存せずにに構成されている様子を示す。ここで

はMVCリポジトリがあります注射

enter image description here 私の理解では、主な依存関係がある...

  1. コア\ルーターはFooController
  2. はFoo \コントローラに依存します(親経由:: __方法を構築)コア\コントローラに依存します
  3. コア\コントローラは、Core \ビューに依存Foo_Modelは、コア\データベースに依存コア\モデルに依存

質問

だから私は、私はここで依存性注入を使用する必要がありますどのようにと少し混乱しています...例えば:どのように私は親との依存性の注入を実装するのです:: __コンストラクタ(すべてであれば)?

また、parent :: __ constructのようにフレームワークを強く結合しすぎるようになっていますか?

ご返信いただいた返信には、事前に感謝しております。

+0

このようなクールなフローチャートを作成するためにどのようなプログラムを使用したのか分かりますか?ありがとう! – A191919

+0

確かに、私はちょうど古いpaint.netをプレーしました、私は編集しやすいようにレイヤーを使います。ルートの1つのレイヤー、バックグラウンドの1つのレイヤー、コードのPrt Scr。コードを視覚化するのに本当に役立ちます。このようなコードを視覚化するのに役立つプログラムがあれば、それは素晴らしいでしょう! –

答えて

2

実際に依存性注入を実装する必要があります。現在は存在しません。オブジェクトは依存関係を渡されません。あなたのコンストラクタでは、を受け取り、正しい実行に必要なオブジェクトであるを受け取る必要があります。それはdependency injectionの基礎です。

依存性注入は、アプリケーションのbootstrap phaseで発生します。ブートストラップは、httpリクエストを扱う私たちの場合には、実際に何をするかを処理するための環境を準備するアクションと考えています。

一般的にindex.php only calls a bootstrap.php fileです。そのブートストラップファイルは、要求を特定のコントローラにルーティングし、途中で依存関係を作成します。

parent::__construct()を使用すると、実際にオブジェクトの依存関係をどのように渡すのかが分かります。しかし、あなたはそれがなぜ必要なのか疑問に思うことができます。あなたのコントローラーがコアコントローラーを拡張する理由はわかりません。実際には常に同じ依存関係を持つわけではなく、すべてが基本クラスから継承されるようにすると、管理が難しくなります。

+0

素敵な答えと始めるにはいくつかの助けを得ました:) – Linus

+1

あなたが@リナスを助けてくれてうれしい! –

2

あなたは依存性注入と拡張クラスを混同していると思います。

依存性注入は、クラスの外部依存関係を処理します。つまり、あるクラスを別のクラスで使用すると(クラスBではクラスAを使用し、クラスAでは拡張しない)、依存関係になります。依存関係コンテナはインスタンスを自動的に作成し、それを必要とするクラスに渡します。

さらに読むhere

+0

応答時間を取ってくれてありがとう...従属注入を使用する妥当な場所はCore \ Controller(新しいビュー)とCore \ Model(新しいデータベース)です。うーん... –

+0

はい。他のクラスを使用するすべてのクラスは、依存関係を継承する必要があります。これにより、後で依存関係を変更するのがより簡単になります。もう1つの良い点は、コードがさらにテスト可能であることです(嘲笑)。それはあなたが依存関係/サービスコンテナを必要としないことを意味します。しかし、それは依存関係の問題を処理するための良い、中心的な方法です。しかし、すべての樹形が外部(構造体またはセッター)から来るようにクラスを構築する場合、最初から依存関係コンテナを使用する必要はありません。後でそれを使い始めるのは簡単です。しかし、私は最初からそれを使用することをお勧めします。 – Crofly

+0

http://pimple.sensiolabs.org/をご覧ください。非常にシンプルな依存関係コンテナであり、どのように動作するかを知ることができます。 – Crofly