1

以前に設計した 3 つのクラス (A、B、および C) で使用されるクラス X を追加しようとしています。

新しいクラス X には、新しい機能のためのデータと関数が含まれているだけでなく、それを使用して下位層を非表示にするクラスにサービスを提供します。問題は、A、B、および C がクラス X をまったく異なる方法で使用することです。つまり、異なる機能を使用することです。

私の質問は、新しいクラス X に API (または C++ の抽象基本クラス) を提供する必要があるかどうかです。その API は、X クラスごとにするか、A、B、および C クラスごとにする必要がありますか? API は、それを実装するクラスよりも、その呼び出し元により密接に関連している場合があることをどこかで読んだことがあります。呼び出し元ごとに 1 つの API を提供すると、API には特定の呼び出し元が必要とする関数のみが含まれます。

それとも、通常の C++ クラスを作成し、呼び出し元が A、B、および C のそれぞれで X のパブリック関数のサブセットを使用できるようにする必要がありますが、「技術的には」それらすべてを使用できますか? クラス X の機能が変更される可能性はほとんどなく、X と同様のクラスを作成する必要もありません。

オブジェクト指向プログラミングに完全に精通しているわけではない場合、クラスにインターフェイス/API を提供する理由の 1 つは、別のサブクラスを追加してもインターフェイス/API を使用するコードを変更する必要がないためです。これは、呼び出し元がインターフェイスで動作するためです。名前を付け、動的バインディングを使用して正しいサブクラス タイプを解決します。

ご不明な点がありましたらお知らせください。できる限り迅速にお答えできるよう努めます。

ありがとう、

トーマス

4

2 に答える 2

1

これらの関数はすべて同じクラス X に属していますか? さまざまな機能をさまざまなクラスに分離することを検討してください: http://en.wikipedia.org/wiki/Low-Coupling_/_High-Cohesion_pattern

しかし、X の機能が何であるかを知らなければ、これ以上手助けすることは困難です。

于 2010-07-26T09:36:59.947 に答える
0

状況が変わる可能性が低い場合は、おそらく余分な努力をする価値はありません。

ただし、そうすることにした場合、問題は、新しいクラスが機能のすべてを実装するのか、それとも一部だけを実装するのかということです。たとえば、それらはバックエンドストレージを共有しているので、すべてを一度に更新する必要がありますか (この場合、分割する意味はありません)、または分割 (@GarethOwen によって提案されているように) が完全に個別の問題に関連していますか?おそらく進むべき道。

于 2010-07-26T09:39:36.977 に答える