相互に依存する多数の関数を含むライブラリがあるとします。このライブラリは大きすぎるため、分割したいと考えています。適切なパーティションを見つけるためのアルゴリズムは何ですか?
簡単な例では、アルファ、ベータ、ガンマ、デルタの 4 つの関数があります。
- beta と gamma は両方とも delta を呼び出します。
- module1 は alpha と beta を呼び出します。
- module2 はガンマを呼び出します。
- module3 は、alpha、beta、および gamma を呼び出します。
アルゴリズムの出力は次のようになります。
- LibA には (アルファ、ベータ) が含まれています
- LibB には (ガンマ) が含まれています
- LibC には (デルタ) が含まれています
- module1 は LibA に依存します
- module2 は LibB に依存します
- module3 は LibA と LibB に依存します
- LibA は LibC に依存します
- LibB は LibC に依存します
つまり、次のプロパティを持つ最もきめ細かい Lib* パーティションを見つけます。
すべての X について、LibX が何らかの方法で LibY と LibZ に分割されている場合、LibY に依存するすべてのモジュール/ライブラリも LibZ に依存し、その逆も同様です。
これに対する標準的な解決策はありますか?