1

私のプロジェクトには 3 つのクラスがあります。それらを MainWindow 、 ProcessUserInput、 InitialUIPreparer と呼びましょう。

MainWindow の仕事は、ボタン、テキスト、コンボボックスなどを介してユーザーと対話することだけです。

ProcessUserInput は、MainWindow と calc から取得した値を使用して何らかの計算を行います。終了すると、処理されたデータが MainWindow に返されます。

また、InitialUIPreparer は、MainWindow に描画する必要があるいくつかの図形の場所を計算します。座標を渡すだけで描画しません。ただし、ウィンドウサイズなどのデータも取得する必要があります..

OK 問題は、 MainWindow が各クラスからデータを取得する必要があり、クラスが MainWindow からデータを取得する必要があるように始まります。これは循環依存につながります。MainWindow.h を "ProcessUserInput" と "InitialUIPreparer" に含めることで問題を解決します。しかし、「class ProcessUserInput」や「class InitialUIPreparer」のように、MainWindow で前方宣言を使用するだけです。

もちろん、まだ開発を続けることができます。しかし、私の場合、前方宣言が何度も必要な場合と同様に、設計が悪いかどうかを示していますが、将来のプロジェクトのために設計を再検討する必要がありますか?

4

2 に答える 2

2

一般に、クラスを単独で前方宣言することは、設計が悪いことを示すものではありません。これは、実行時の依存関係階層が双方向である場合に非常に頻繁に発生します。ただし、依存関係グラフが非常に密集している (つまり、ほぼすべてのクラスが他のほぼすべてのクラスに依存している) 場合は、心配し始める正当な理由になります。

循環依存

あなたの場合、Model-View-Controller 設計パターンと一致する方法でクラスを分離することでメリットが得られるようです。Model具体的には、他のクラス間で共有する必要があるすべての情報を保持する別のクラスを導入したい場合があります。これを と呼びましょう。各クラスは必要な情報を shared から引き出し、Model生成した情報もモデルに入れます。このようにして、個々のクラスは、すべてのクラスへの依存関係をクラスへの単一の依存関係に置き換えることができますModel

モデルの依存関係

于 2013-10-30T12:59:04.343 に答える