同じ振る舞いをするコードのどちらを採用するべきかの判断基準を整理してみる
- 条件分岐箇所が少ない
- コード量が少ない
- 外部ライブラリへの依存度(質と量)が小さい
- オープン・クローズの原則(OCP)に沿っている
3つしか思いつかなかった><4つにした。
条件分岐箇所が少ないということは、振る舞いの場合分けが単純化されているってことで、試験性や保守性が高い。オブジェクトの多態によって振る舞いを切り替える場合も、インスタンスの取得時に条件分岐を集中させ、個別のメソッドでは条件分岐させないようにしている。
トレードオフになる部分もある。外部ライブラリを使わないようにすれば外部依存の量は減るが、コードの量が増える。外部ライブラリへのアダプターを用意すると依存の質は向上するかも知れないが、アダプターの量だけコードの量が増える。どちらが良いかは外部ライブラリの質によるところが多そうかな。
この基準はメソッド単位、クラス単位、パッケージやライブラリ単位でもいけそう。
あ、オープン-クローズの原則も入れるべき?
→入れるべき。これで、内部設計の問題(条件分岐とコード量)、自→自の依存(外部依存性)、他→自の依存(OCP)、3つの観点が網羅されたわけだ。ん?他から自への依存は振る舞い自体の検討になるのかな?