1

プロジェクトはどのくらい互いに独立している必要がありますか?

私は非常に大きなVisualStudioソリューションを持っており、すべてのプロジェクトが相互に依存しています。ソリューションから1つのプロジェクトを取得して、別のコンピューターの別のソリューションに追加することはできません。これらはすべて相互に関連付けられているためです。

私は物事を正しくやっていますか?


例えば;

私のプロジェクトのこれら3つを考えてみてください(ディスクファイル、データコンバーター、数学-.hと.cppファイルのペアはC ++クラスです。それぞれの名前で言及します):

The Solution
|
|---- Disk File
|     |
|     |---- BinaryFile.h, BinaryFile.cpp
|     |---- TextFile.h, TextFile.cpp
|
|---- Data Converter
|     |
|     |---- Utf8.h, Utf8.cpp
|     |---- XmlParser.h, XmlParser.cpp
|     |---- StringFormatter.h, StringFormatter.cpp
|
|---- Math
      |
      |---- Plotter2D.h, Plotter2D.cpp
      |---- Matrix.h, Matrix.cpp
  • TextFileUtf8文字エンコードに使用します。それはにDisk File依存しData Converterます。
  • XmlParserを使用しTextFileます。それはにData Converter依存しDisk Fileます。
  • Plotter2D外部ソフトウェアで使用TextFileするためにいくつかのデータをダンプするために使用し、そのメソッドMatrixでいくつかの文字列フォーマッタツールを使用します。::ToString()それはとの両方にMath依存します。Disk FileData Converter

これは、いくつかのクラス間の依存関係の単なる例です。実際、私のソリューションにはもっと多くのファイルがあります。これは、コードの依存関係の混乱です。

友達と一緒にプロジェクトを始めます。Math彼は自分のソリューションに私のプロジェクトを必要としています。しかし、これらの依存関係に関して多くのコンパイラエラーが発生するため、彼がそれを自分のソリューションに適応させるのは簡単ではありません。

この依存関係の量は正常ですか?私はそれを正しくやっていますか?必要なすべてのプロジェクトのすべての一般的なファイルのコピーを保持するのはどうですか(これはばかげているかもしれません、私はそれを求めているだけです)?

私はあなたの提案が必要です。

4

3 に答える 3

0

このような依存関係は常に存在しますが、いくつかの方法を使用して回避できます。

  1. クロス モジュール ヘッダーを含めずに .h ファイルの独立性を維持するには、代わりに前方宣言を使用し、.cpp ファイル内の実際のヘッダー ファイルを使用します。

  2. 他のヘッダーで定義された列挙型を関数に渡すには、void ポインターを使用して .cpp ファイルの値を渡し、検証できます。

  3. また、「extern C」関数を使用することもできます。

于 2012-09-25T15:38:36.967 に答える
0

通常、依存関係の管理は複雑な問題です。あなたがすでにフォローしているように見える主なポイントは、依存関係が非循環グラフを作成する必要があるということです。

それを超えて、依存関係を可能な限り壊すようにする必要があります。たとえば、XmlParser本当に必要TextFileですか? または、テキスト ファイルを解析したいアプリケーションが後者を intantiate し、内容を文字列に読み込んで に渡すことができXmlParserますか? 2 番目にできれば、 にXmlParser依存しなくなりますTextFile

考慮すべきもう 1 つの点は、作成する依存関係のタイプです。同じ例を使用すると、 ?TextFileのパブリック インターフェイスで使用されます。XmlParserそこで使う必要ある?ライブラリをリンクする必要がある場合、それがインターフェースの一部である場合、のユーザーはXmlParserより高い結合を作成するためのヘッダーを含める必要があります。この場合、たとえば、の代わりにファイル名を渡して、インターフェースから依存関係を削除できます。TextFileXmlParserTextFileXmlParserTextFile

結局のところ、これはちょっとした芸術です。依存関係の数をできるだけ少なくすることに重点を置き、必要な依存関係については、結合を最小限にするようにしてください。

もう一つは、数学ライブラリです。への依存関係を壊しTextFileます。追加機能は、数学コンポーネントのシリアル化を処理する別のライブラリで提供できます。Mathこれにより、ファイルのバックアップを必要としないのユーザーは、TextFileコンポーネントに依存しなくなります。

于 2012-09-25T15:40:13.683 に答える
0

より良いアプローチは、プロジェクト間の依存関係サイクルを回避することでした.「ディスクファイル」や「データコンバーター」などのユーティリティクラスが同じプロジェクトに存在する可能性があり、名前空間を使用してモジュール性を強化できます.

また、依存関係を把握するには、 doxygenCppDependなどのツールを使用してプロジェクト間のすべての依存関係を検出し、友人に提供したい特定の機能に必要なすべての依存関係を検索するときに時間を稼ぐことをお勧めします。

于 2012-09-25T15:40:45.953 に答える