These ideas are being considered for Cheetah 2.0.
- There are five distinct objects in Cheetah which should have a clearer
1. TEMPLATE DEFINITION: a string.
2. TEMPLATE METHOD: the method that implements the desired template
(which may be the Main Method or a #def/#block method). This is
inside the generated class, which is inside the generated module.
3. DATA: the searchList, local variables, current filter, etc. Everything
that changes at runtime.
4. INFRASTRUCTURE: the internal code used by Cheetah to fill and maintain the
5. SERVICES: convenience methods from the infrastructure exposed to user.
Cheetah combines 2-5 into a single Template subclass. CheetahX proposes to
keep these distinct, with defined containment and interfaces between them.
- The TEMPLATE METHOD might instantiate an INFRASTRUCTURE object for each
fill. The constructor arguments would be everything necessary to access
the DATA. Perhaps the TEMPLATE METHOD can pass its own code block, making
its own locals/globals accessible directly. This would be a bit
unorthodox, but less so than the current practice of switching the
template instance's class on the fly.
- For SERVICES, add a custom object to the searchList that knows how to
access the protected INFRASTRUCTURE data.
- Push more work into INFRASTRUCTURE, to insulate the TEMPLATE METHOD from
implementation changes. For instance, replace every placeholder lookup
with a simple INFRASTRUCTURE method call, and let the infrastructure
do all the processing. (It can use the code block mentioned above to
access the searchList and current filter.) For local variable
lookups, you can call another method and pass the value directly.
For caching, I guess you pass in the cache time (or a special constant)
as a separate argument, and let the INFRASTRUCTURE maintain the cache.
- Tavis wants to rewrite the cache infrastructure and fully implement it.
- The Template class needs to be split up into stuff nececssary to fill
a template (the INFRASTRUCTURE), and stuff necessary to comple a template
(which is not necessary for using precompiled templates, and slows down
Cheetah's import time).