标题听起来有点不清楚,我不确定术语。但我的问题是:我现在正在实施我们软件的许可证验证功能,该功能由几个模块组成。例如,函数调用类似于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
中只能列出一些“基本”模块,但从长远来看,让所有模块都可以出现在列表中会更好。
答案 0 :(得分:0)
列出已经验证许可证的所有模块的集合,并在调用可能的冗余验证之前签入此集合。如果集合中没有值,请在此处验证并添加已验证模块的名称。
有另一个类似的列表模块,因为该验证已故意失败,所以我们不会在这种情况下进入无限循环。
如果验证在集合中持续累积直到足以打破循环,验证就会同时发生。