委譲 (delegation)
関数ポインタに似てるけど、methodが所属してるインスタンスの状態もくっついてくるから、その辺は違う
連載:C#入門 第17回 処理を委譲するdelegate(5/5) - @IT
eno0514.hatenadiary.jp
型だけ決めて、委譲する。 = interface実装する実体を後で入れる
用語整理
- 移譲
- 依存性の注入: 設計パターンの一種
- 関数ポインタ
- 制御の反転
根底にある思想・パラダイムは何か
-> interface決めれば、callerとcalleeを分離できる。なのでは?
callerはcalleeを使う/呼ぶので、使い方(I/Oなど)は絶対に知らないといけない
でもより疎結合にしようと努力することはできる
関心の分離が根底か
DIは
「caller内でcalleeをインスタンス化する」
密結合を、
「インスタンス化済みのcalleeを注入する」
疎結合に変える設計パターン
制御の反転
bliki-ja.github.io
制御 == main関数 が誰か、という話.
ライブラリとフレームワーク、がわかりやすい
ライブラリはcallee, つまりmainから呼ばれる側
フレームワークはcaller, つまりmain関数そのもの、呼ぶ側.
callbackはまんまcallee
caller, callee
呼ぶか、自身を登録するか
やはり設計パターンか?
関数ポインタ使わんでもええで、な話
developer.wonderpla.net
依存性の注入
呼び出し側 (caller) が呼び出され側 (callee) を呼ぶ際、
caller内でcalleeを生成したりせずにconstuctorなどで外部から注入する設計パターン.
callerはcalleeの機能を使っている、つまりcallerはcalleeに依存性している。
この依存物を外から注入して使うパターンがDI.