Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

IoC とは

1,092 views

Published on

Inversion of Control とは?

Published in: Engineering
  • Be the first to comment

IoC とは

  1. 1. Inversion of Control とは? doi
  2. 2. ‒Martin Fowler Inversion of Control is a key part of what makes a framework different to a library.
  3. 3. Inversion of Control • 制御の反転と訳される • IoC と略される
  4. 4. 例1 システムは入力を受け取り表示する
  5. 5. 手続き的な制御 function AskUserNameAndPrint() { a = waitForInput(); print( a ); }
  6. 6. 反転した制御 function AskUserNameAndPrint() { framework.WhenInputSomeString( function doThis(string a) { print( a ); } ); }
  7. 7. Call から Callback へ 呼出したい処理を記述 ↓ 呼び出されたい欲しい処理を記述
  8. 8. ‒Hollywood principle Don't call us, we'll call you.
  9. 9. 例2 1秒おきに時刻表示してピッと鳴らす
  10. 10. 手続き的な制御 while(1) { t = getTime();
 print( t.hour+ : +t.minutes+ : +t.seconds ); beep(); sleep(1); }
  11. 11. 反転した制御 eventMap map; function listen(string event, function f) { map[event].push(f); } // implements (timer) while(1) { each( f in map[event] ) { f(); } sleep(1); } function playBeep() { beep(); } listen( TimerEvent , playBeep ); function showCurrentTime() { t = getTime(); print( t.hour+ : +t.minutes+ : +t.seconds ); } listen( TimerEvent , showCurrentTime ); frameworkimplements
  12. 12. 依存がなくなる 現在時刻を表示する ↑依存が無い↓ 音をならす
  13. 13. ゲームループ(Call) と タスクシステム(Callback) 実は身近な概念だったんです
  14. 14. 次回は Dependency Injection についてやります

×