コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
依存性注入
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''依存性注入'''(読み:いぞんせいちゅうにゅう、[[英語]]:Dependency Injection、通称:DI)とは、 [[オブジェクト指向プログラミング]]における[[カプセル化]]の際に、[[C言語]]の[[グローバル変数]]より悲惨なことになりがちが「[[階層化の有害性]]」を低減しようと試みる[[コーディングスタイル]]のことである。 依存性注入を積極的に使う[[プログラミング]]のスタイルを「[[コンポーネント指向]]」と呼ぶらしい。 ==概要== その[[オブジェクト]]内で利用している別の[[オブジェクト]]を明示的に限定せず、 [[インターフェース]]だけを定義しておき、 利用時に設定ファイルなどから察して動的に読み込む(注入)という記述スタイルである。 ==実装例== まずは依存性注入の例を見てみよう。 ===DIを利用しない=== <source lang="csharp"> class Hair { } class Human { Hair hair; } </source>Humanは常に「Hairの状態」がどうなっているのか気にしなければならない。実装によっては[[単体テスト]]をする際にも「Hairの状態」に応じた全パターンを試さなければならないなど悲惨なことになる。 プロジェクトが肥大化すると「Aクラスで利用しているBクラスで利用しているCクラスで利用しているZフィールド変数の状態まで把握していないとAクラスは正常に動作しない」などという状態に陥り、いわゆる[[デスマーチ]]が発生する原因となっている。 ===DIを利用する=== <source lang="csharp"> interface IHair { } class Hage : IHair { } class Human { IHair hair; public Human() { // hairに依存性を注入(hageを注入) // このでは省略しているが「harに代入するのはHageクラス」というのは // 設定ファイルで切り替えれるようにしておく。 hair = new Hage(); } } </source>HumanはIHairインターフェースだけをもつ。 依存性注入を利用することでIHairインターフェースにどんなメソッドがあるかだけは気にする必要があるが、Hair内部の状態までは気にしなくてもよくなる。 これにより[[クラス]]ごとの独立性が高まり、[[C言語]]の[[グローバル変数]]より悲惨なことになりがちが「[[階層化の有害性]]」が低減される。 ツルッパゲ(インターフェース)になればどんなカツラ(依存性注入)もかぶれるぞ!
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化