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