The compiling and the reconstruction phases can happen simultaneously. For example, the reconstruction phase is being done on frame 10 because the user clicked on it while the compiling phase is occurring for frame 34. This means that there are two instances of each data object: the one used for compiling and the one used for reconstruction.
You should not declare variables in the common section of method files because variables in the common section exist in only one place. This means that the variable will be shared between the compiling and reconstructing instances of a data object. If the user clicks on frame 10 while frame 34 is being compiled, the frame 10 reconstruction instance and the frame 34 compiling instance will be accessing and very likely changing the same variable at the same time.
If the FRM file exists when a capture file is opened and it is up-to-date, the compilation phase doesn't occur. This means that the compiling instance of the data object doesn't exist, so any assumptions made on the value of a variable change whether there is an FRM file or not.
If a data object is written generically, it could be used in two different places by giving a different name to it. This is why you have to supply a data object name as the first parameter to methods that use it. Having one traditional data object for the two different instances will not work.