On 10/17/2016 11:05 PM, David Christensen wrote: > I have applied a hierarchical module dependency architecture to avoid > circular dependencies: > > 1. Modules and test scripts that do not depend upon any other > modules within the distribution are "dependency level 0". > > 2. Modules and test scripts that depend only upon level 0 modules > are level 1. > > 3. Modules that depend only upon levels 0 through N are level N+1.
Pondering this some more, here is a more accurate statement of the strategy I have been using to avoid circular dependencies within distributions (revised rules marked with '*'): 1. Modules that do not depend upon any other modules within the distribution are "dependency level 0". *2. Modules that depend only upon modules of levels 0 through N-1 are level N, for levels N=1 and higher. *3. Module test scripts shall not depend upon modules of higher level than the module they are testing. *4. Test scripts shall be run in order from lowest to highest level. It's rule #3 that has been giving me the most trouble. For example, I have testing modules up to level 5 that I would like to use when testing modules of level 0-4. Rule #3 blocks me. As I code my test scripts with no outgoing dependencies -- e.g. I do not 'use' or require' test script files in other files -- test scripts cannot create circular dependencies. The fact that they are named after a particular module is for my benefit; but accidental as far as the tools are concerned. The file name of a test script has no bearing upon its dependency level. So, perhaps rule #3 should be revised. Here is the proposed strategy: 1. Modules that do not depend upon any other modules within the distribution are "dependency level 0". 2. Modules that depend only upon modules of levels 0 through N-1 are level N, for levels N=1 and higher. *3. Test scripts have a level equal to the highest level module they depend upon. 4. Test scripts shall be run in order from lowest to highest level. I would then write multiple test scripts for each module -- "early" test scripts of the same level as the module under test and "late" test scripts that depend upon higher level modules. Comments are welcome. David