コード例は C# ですが、これは一般的な OO の質問です。
オブジェクト指向のルールに従って、クラスの結合を最小限に抑え、可能な限りメンバーを非公開にする必要があることなどを知っています。
次の例を検討してください。
プログラムの文字通りすべての面で使用されるある種のデータセット(System.Data.DataSetについては話していません)を持つ難解なプログラムを作成しています。実際、このプログラムは基本的に、データ セットをロード、表示、操作、および保存するためだけに存在します。さらに、一度にロードできるデータセットは 1 つだけであり、プログラムが開いたときにロードされます。
オブジェクト指向のルールに厳密に従えば、
public void ShowSomeGraphs(IData data)
{
// do stuff with data which implements IData
}
ただし、たとえば にpublic static Data
メンバーを格納する可能性があります。Program
public void ShowSomeGraphs()
{
// do stuff with Program.Data
}
一方で、大幅に増加したクラス結合のために、わずかに短い関数シグネチャを交換しました。一方、実質的にすべての関数にDataパラメーターを渡すことはなくなりました。
正しい答えはおそらく次のとおりです。可能な限りクラスの結合を避けます。ローカル データ変数は単なるポインターであるため、メモリ オーバーヘッドは無視できます。また、クラスが分離されているため、後で別の場所で使用できます。
現実的に言えば、Data クラスの構造は別のアプリケーションでは驚くほど異なる可能性が高いため、このプログラムからクラスを取り出して、微調整なしで別の場所にドロップできるわけではありません。ドロップインできるような方法でクラスを作成するために必要な余分な時間と労力は、利害関係者に正当化するのが難しい場合があります。
私は現在、この種のプログラムに取り組んでおり、OO-canon アプローチを使用しました。データ パラメーターは必要な場所に渡されます。将来のコードの再利用のためにデータ セットを一般化するために、IData インターフェイスとのクラス結合を最小限に抑えました。アプリケーションを考えると、このコードが再利用されることはないとほぼ確信しています。これらの追加のインターフェイスと抽象化がなければ、プログラムはエンド ユーザーに関する限りまったく同じように機能していたでしょうが、私にとっては頭痛の種と開発時間が大幅に削減されていたでしょう。
これについてあなたはどう思いますか?クラスが後で別の場所で使用されているのを確認できない場合は特に、できる限りクラスが分離されるように、インターフェイスと一般化を作成するために余分な時間を費やすことは正当だと思いますか?