Design Strategy for Class Specialization
[I had asked this on the PDN in December, and posted as a document elsewhere on Mesh, so I am posting here as a discussion.]
Obviously, when specializing applications, we do so through higher-level rulesets.
Specializing through *classes* is generally optional -- and typically done for work. I'm trying to find the best practice document which actually explains this.
Some ideas, in order of importance:
- Concrete classes can be saved in separate tables
- With transform rules, you can call invoke super() rule for parent classes (doesn't work for rulesets)
- Rules can inherit via pattern
- Packaging is Java-like (everything organized)
There's a downside -- it keeps the rules separate in the explorer & smartprompts, which may or may not be desirable -- if most of the rules are in parent classes.
Certainly this is done for work.
Data & Index classes -- sometimes, but not always.
But what about abstract classes like Embed, portals? What about settings?
There's a "workpool" but no "datapool"...
Consider CPM. Looking at v6.2, we see the work class is under PegaCA-, while the portals and settings are under CPM-
Should we subclass the CPM-Portal classes? (or should we explicitly not?)
Suppose we don't specialize... and we want to apply Whens/Privilege test in the portal or navigation menu. If we haven't subclassed, the privileges remain in CPM-Portal, which means that we can't reuse them in our own class structure. Unless we put them in @baseclass... and if you have to do that, then you aren't using class specialization!