G E M S - Generic Entity Management System
GEMS is my proposal for a PlusNet application to replace our current POMS, Problems and Bug Tracking functionality with a new solution using
the object handling concepts from Inphusion as a starting point.
In a Nutshell, we need to:
- Extract the object architecture and data hierarchies from Inphusion into a "standalone" system with a few skeleton classes.
- Identify the attributes that are common to ALL entities managed by the systems we want to replace (jobs, tasks, bugs etc.) and store these in tblObjectMeta.
- Identify other attributes that are common to some entities but not others, and map these out into a "family tree" of classes.
This is not a hierarchy in the way that Tasks are children of Jobs in POMS but a map of which classes inherit from which other ones.
- Review the structure to see if any high-traffic entities have ended up as distant nodes (ie, they inherit from more than three classes).If they are, we construct them as primitive nodes (ie, they inherit directly from CObject_Proto).
- For each identified class, compile a state chart which shows all the possible statuses of the represented entity and the actions which cause it to move
between those statuses. Do this properly, and we will save our colleagues time in terms of training in how the system works.
- Identify an appropriate data hierarchy to store the objects - this time we are talking about project -> subproject -> job -> task.
This exercise generates the list of allowed child objects per class - for example, we define that an object of class "bug" can be a parent to objects of class "comment" but not of class "project".
- At this point, we will have all the information to write all the classes for all the objects in all the sizes! So... we will write them!
Remember, the classes each contain:
- the attributes unique to the class
- code to save and read these attributes from the Persistent Store
- the allowed methods per status definition - what can you do to the object, given it's current status?
- the allowed child classes - which classes of object can exist as children of an object of this class?
- the functionality to display / edit / otherwise manipulate the object
- Identify / specify / design "parent" forms and interfaces (everything Inphusion can't generate automatically, eg the "My Work" screens etc.)
- Build these interfaces to activate all the functionality built on the backend.
- Populate the systems with sample data and test.