0

タイトルは少し不明瞭に聞こえますが、用語についてはよくわかりません。しかし、私の問題は次のとおりです。現在、いくつかのモジュールで構成されるソフトウェアのライセンス検証機能を実装しています。たとえば、関数呼び出しは次のようLicense.IsModuleEnabled(m As Module)になります (コードは VB.NET にあります)。

つまり、あるモジュールが前提条件として別のモジュールを必要とすることはよくあることです。たとえば、ModuleA を実行するには、ModuleB も有効にする必要があります。したがって、ModuleクラスにRequiredModulesは、のリストであるという公開番号がありModuleます。したがって、IsModuleEnabled()関数は次のようになります。

Public Function(m As Module)
   ...     
   For Each module In m.RequiredModules
       If Not IsModuleEnabled(module) Then Return False
   End For
   ...
End Function

問題は明らかです (ただし、解決策は私にはわかりません)。ModuleA が ModuleB を必要とし、ModuleB が ModuleA を必要とする場合、関数はデッド ループになります。

これらのモジュールは互いに並列であるため、そのような検証機能を管理する方法がわかりません。私たちの現在の解決策は、一部の「基本的な」モジュールのみを にリストできるようにすることですRequiredModulesが、長期的には、すべてのモジュールをリストに表示できるようにする方がよいでしょう。

4

1 に答える 1

0

ライセンスが既に検証されているすべてのモジュールをリストしたセットを用意し、潜在的に冗長な検証を呼び出す前にこのセットをチェックインします。セットに値がない場合は、検証を行い、検証済みのモジュールの名前をそこに追加します。

その検証のモジュールをリストする別の同様のセットを持っているため、そのような状況でも無限ループに陥ることはありません。

これは、検証が並行して行われる場合にも機能するはずです。これは、知識がループを破るのに十分になるまでセットに蓄積し続けるためです。

于 2013-08-30T15:20:09.920 に答える