プラグインベースのソフトウェアとは?開発とテストを容易にするデザインパターン #rubykaigi #rubykaigiA
JavaではDI手法が確立されているが、Rubyではいい方法を知らないので知ってたら教えてほしい。keyword argumentをいい感じにbindできるようにしたい。 #rubykaigi #rubykaigiA
2015-12-13 15:06:32{:keyword => class} 名前付き引数使うんだぜ、ってことか #rubykaigi #rubykaigiA
2015-12-13 15:06:40プラグイン同士の依存関係が生じるときに困るのはバージョンによってプラグインのインターフェースが変わるときだよなぁ。 #rubykaigiA
2015-12-13 15:06:47デザインパターン2 動的プラギンローダー プラグインはプラグインローダーを呼び出す、プラグインはエコシステムを作り出す #rubykaigi #rubykaigiA
2015-12-13 15:07:29ダイナミックプラグインローダ カーネルとは別にプラグインローダを用意するパターン #rubykaigi #rubykaigiA
2015-12-13 15:07:35例2: dynamic plugin loaderつかう plugin側からもloader呼べて,pluginがエコシステムつくりだす #rubykaigi #rubykaigiA
2015-12-13 15:07:35別のデザインパターンとして、Dynamic Plugin Loaderがある。必要になったときにPluginLoaderに問い合わせてプラグインの実体を取得する。 #rubykaigi #rubykaigiA
2015-12-13 15:07:42個人的には、加えて基本的なIntegration Testのテストケースをコアで提供するとより信頼性の高いプラグインであることを保証できて良いかなと思う。 #rubykaigi #rubykaigiA
2015-12-13 15:07:50プラギンローダープラグイン。 コアの内外にぶっささっており、コアの内外のプラグインとやりとりする #rubykaigi #rubykaigiA
2015-12-13 15:08:22さらに3番目の方法として、DIとPlugin Loaderのコンビネーションが考えられる。コアアイディアはPlugin Loader自体をPluginにすること。 #rubykaigi #rubykaigiA
2015-12-13 15:08:25従来の方式も、プラグインベースアーキテクチャもトレードオフだよね #rubykaigi #rubykaigiA
2015-12-13 15:09:12ソフトウエアの複雑性を上げずに拡張性を保つには core を小さく、機能の大部分を plugin で構成するような(microkernel のような)アーキテクチャがほしい。しかしそれは設計が難しく、最適化も難しい。 #rubykaigiA
2015-12-13 15:09:17traditionalな方法とplugin-basedは一長一短あるから、ベストな方法はなくプロジェクトに合わせて選ぶべき、というここまでのまとめ。 #rubykaigi #rubykaigiA
2015-12-13 15:09:19そのような Purely plugin based architecture を構築するにはいくつかの手段がある。ひとつは Dependency Injection(DI)。 DI コンテナを使用してインターフェイスを明示しつつ実装を疎結合化する。 #rubykaigiA
2015-12-13 15:09:27二つ目は dynamic loading of plugins. 一種の lookup だが、必要になったときに動的にローディング。三つ目は combination. Dependency Injection + Plugin Loader の組み合わせ。 #rubykaigiA
2015-12-13 15:10:27で、Fluentdの話。ストリーミングデータはJSON、実装はC&RubyのLog Layer Data Collector。受信元と送信先が素直にやるとn*nなので、inとoutをpluginにしてfluentdで集約する。 #rubykaigi #rubykaigiA
2015-12-13 15:11:27flexibilityだけじゃなくテストのしやすさとか単純にシンプルを保つためにもPlugin。そこまでベースを作りこむことは当面なさそうだけど、単純にコンポーネントの分離技術として聞く #rubykaigiA
2015-12-13 15:12:13fluentdのアーキテクチャとかプラグインベースだよね パターン3。DIとプラギンローダーの組み合わせ。 従来の方式も、プラグインベースアーキテクチャもトレードオフだよね #rubykaigi #rubykaigiA
2015-12-13 15:12:15