Aが持つ機能を、Bが持たない場合

  • 路線1: サポートしない路線
    • 実装は楽
    • 上で書いた残念なことになる
  • 路線2: エラーにする路線
    • 例えばインターフェイスはあるが、実行するとエラーになる設計
    • 結局「どのバックエンドでは何が使えるか」はユーザが理解しなければならない
  • 路線3: 頑張って実装してしまう路線
    • 例: 機械学習ライブラリScikit-Learnでは異なる学習モデルに共通インターフェイスを用意した。
      • モデルmに対してメソッドm.predict_probaは確率推定の結果を返す
      • 確率推定の機能を持たないSVMに対してもこのメソッドが生えている
      • 4/5のデータで5回SVMを走らせてロジスティック回帰している: SVMで確率推定
    • とても労力がかかる
    • 必ずしも実装できるとは限らない
      • その場合、路線2に帰着する

共通インターフェイス #ソフトウェア設計 #設計