共通インターフェイスの罠
異なる複数のものがある
これらの操作を共通化しようと考える
共通のインターフェイスをつけようと考える
それぞれ別々に習得するコストがもったいないから
異なる複数のものにはそれぞれ異なった得意分野がある
理想は双方の長所を活かせることだが、しばしば双方の共通部分だけになり強みを失う
https://gyazo.com/ab259ca763419224b870fdc26f48f9c4
Aが持つ機能を、Bが持たない場合
路線1: サポートしない路線
実装は楽
上で書いた残念なことになる
路線2: エラーにする路線
例えばインターフェイスはあるが、実行するとエラーになる設計
結局「どのバックエンドでは何が使えるか」はユーザが理解しなければならない
路線3: 頑張って実装してしまう路線
例: 機械学習ライブラリScikit-Learnでは異なる学習モデルに共通インターフェイスを用意した。
モデルmに対してメソッドm.predict_probaは確率推定の結果を返す
確率推定の機能を持たないSVMに対してもこのメソッドが生えている
4/5のデータで5回SVMを走らせてロジスティック回帰している: SVMで確率推定
とても労力がかかる
必ずしも実装できるとは限らない
その場合、路線2に帰着する
共通インターフェイスの罠
#ソフトウェア設計
#設計