プラグインベースのソフトウェアとは?開発とテストを容易にするデザインパターン #rubykaigi #rubykaigiA

Next up: 14:50-15:25 (35) / "Plugin-based software design with Ruby and RubyGems" / 🔈@frsyuki / 📍HallA ( #rubykaigiA ) #rubykaigi
2015-12-13 14:45:01
Founder of Treasure Data, Inc. The original creator of MessagePack https://t.co/TbHobYGlFU, Fluentd https://t.co/DwYeCNCaDu, and Embulk https://t.co/vZ3FeokAkT. github: https://t.co/50bnyfM3zF

ホールAに移動して"Plugin-based software design with Ruby and RubyGems"を聞いてる。MessagePackの人? msgpack.org #rubykaigi #rubykaigiA
2015-12-13 14:57:18
Plugin Architectureを取ることで、コアをシンプルに保ち、testableにすることができる… うまくデザインされてれば、の話だけどね。 #rubykaigi #rubykaigiA
2015-12-13 14:59:45
どのように plugin architecture を設計したか、のハナシ #rubykaigi #rubykaigiA
2015-12-13 14:59:50
#rubykaigi #rubykaigiA むかしの拡張ソフトウェアアーキテクチャHostアプリの拡張ソケットにプラギンを登録する形
2015-12-13 15:01:00
「従来の方法だと拡張できる場所を用意してそこに登録していく形だった」 #rubykaigi #rubykaigiA
2015-12-13 15:01:30
Plugin Architecture Design Patternには2種類ある。extention pointを用意しておくTraditional wayと、Plugin同士がnetworkを構成するplugin-base。 #rubykaigi #rubykaigiA
2015-12-13 15:01:31
プラグインベースソフトウェアアーキテクチャは カーネルの上にプラグインが積み重ねられている。ネットワークとして。 プラグインのネット枠としてのアプリケーション #rubykaigi #rubykaigiA
2015-12-13 15:02:06
プラグインはベースアプリの受け口にはめ込むのが一般的だけど、プラグインベースアプリケーションはプラグインとカーネルアプリケーションが通信するイメージ #rubykaigi #rubykaigiA
2015-12-13 15:02:09
plugin-basedではKernelはpluginを実装するためのフレームワークに過ぎず、1プラグインが1機能を提供する。 #rubykaigi #rubykaigiA
2015-12-13 15:02:33
パターン1、DI!DI! DIコンテナがオブジェクトを置き換える テストが楽。テスト対象以外をダミーにかえればいいから #rubykaigi #rubykaigiA
2015-12-13 15:03:55
これを実現するデザインパターンの一つがDependency Injection。DIコンテナが実行時にプラグインに置き換えられる。単体テスト時には対象以外をdummyに置き換えることで簡単にテスト出来る。 #rubykaigi #rubykaigiA
2015-12-13 15:03:57
#rubykaigiA DIコンテナだとソフトウェア内の特定のアレだけ切り替えるとかやりやすいわなー。DIの例でもDBドライバ部分とか出てくるな
2015-12-13 15:04:25