1
|
In general, the TempMap code can be pretty frightening. What needs to be done
|
2
|
is to define an interface to TempMap that can be easily and consistently
|
3
|
used by map factories. There should be two general classes of functions
|
4
|
in this interface: those for constructing the TempMap and those for working
|
5
|
with it.
|
6
|
|
7
|
Example of functions in the first category are functions to
|
8
|
add a TempRootClassMap, TempClassMap, or TempTableMap to the TempMap --
|
9
|
basically a way to add or retrieve anything that is stored in a variable
|
10
|
in TempMap. One difficulty here is that map factories have a common need
|
11
|
to retrieve submaps that don't yet exist -- for example, when creating a
|
12
|
TempRelatedClassMap, the map factory needs access to the TempClassMap, even
|
13
|
though it might not yet have been constructed. Thus, the variable access
|
14
|
functions need to come in two flavors: one to say, "I am mapping this now
|
15
|
and an error must occur if I have already mapped it," and the other to say
|
16
|
"I need this object and if it hasn't been created yet, please create it so
|
17
|
I can have a reference to it." This is what is currently done with the
|
18
|
add/map* and get* functions, although the names could certainly be better.
|
19
|
|
20
|
Examples of functions in the second category are those to construct the
|
21
|
table maps from class maps, those to construct a real Map from a TempMap, and
|
22
|
those to construct class maps from table maps (note that the latter doesn't
|
23
|
yet exist).
|
24
|
|
25
|
Thus, the strategy followed by most map factories is either to construct the
|
26
|
class maps (TempClassMap, TempPropertyMap, etc.) and then call a function to
|
27
|
construct the table maps (TempTableMap, TempColumnMap, etc.) or vice versa.
|
28
|
Both types of map factories then call a function to convert the temp maps
|
29
|
into real maps.
|
30
|
|
31
|
One final note is that similar interfaces should be defined for all the Temp*
|
32
|
classes. For example, there should be a well-defined interface for adding
|
33
|
columns to tables, property maps to class maps, and so on.
|