優れた抽象化が頻繁に使用されます
優れた抽象化は、ソフトウェアの2つ以上の場所で参照されます。
例:
- 2+コールサイトで機能します。
- 2つ以上の具象クラスを持つ抽象クラス。
- 2+実装とのインターフェース。
- 2つ以上のインスタンス化を持つジェネリック
- 2人以上のユーザーがいるライブラリ。
- 等
2つ以上の場所で参照される抽象化は、一般的なものを除外することにより、コードサイズを削減するのに役立ちます。これは、良いことです。
ただし、一度だけ参照される抽象化が多数ある場合は、抽象化が不要である可能性が高くなります。
不要な抽象化が発生した場合のいくつかの例:
- オブジェクトハッピーコードの記述(実装または具体化が1つしかないあらゆる場所のインターフェースと抽象クラス)。これらのインターフェースと抽象クラスは必要ありません(開発のその時点で)。YAGNIの原則。
- 誰かが古いインターフェースの上に「光沢のある新しい」インターフェースを構築します。変換後の新しい関数は、古いインターフェースのみを呼び出します。これを数回繰り返すと、大きな混乱が生じることが想像できます。この場合、古い関数には単一の呼び出しサイトがあるため、これらは必要ありません。コードを古い関数から新しい関数に移動する必要があります。または、新しい関数を記述して古い関数を変更しないでください。
本当に良い抽象化のいくつかの例:
- ハードウェア抽象化レイヤー:アプリケーションに単一のインターフェイスを提供するため、アプリケーションはハードウェアの種類ごとにコードを開発する必要がありません。
- ファイルシステム:FAT、NTFS、EXT3を使用してもかまいません。それはあなたがファイルとディレクトリを使うことを可能にします、ファイルシステムドライバは残りをします。
- C言語:CPUアーキテクチャごとにプログラムを移植する必要はありません。コンパイルするだけです。
したがって、あなたの質問に実際的に答えるには、抽象化は2か所未満から参照されている場合は良くありません。
モジュール化に関しては、主観的です。コードを好きなように整理できます。ライブラリのソースコードが単一のソースファイルに含まれている場合、数百のファイルを爆発させた場合よりも悪化することはありません。
抽象化を良いか悪いかを評価するときは、常に全体像を考慮してください。プロジェクト全体、製品ライン全体などです。