Glorp and Magritte both map between model-layer objects and other domains; in Glorp's case, the relational database, in Magritte's case, the web. The truth is that Magritte is a meta-description framework for all kind of descriptions. However, it is mostly used for web applications.
There are many similarities in how each framework manage model-layer class - accessing model's fields, mapping those fields to it's representation, caching/commiting/rollbacking, condition checking/validation and so on. Lot of business applications are RDS-based, CRUD-like systems, with GUI structure close to model structure, and model structure close to database structure. So, developers sometimes feel they are repeating themselves when they code first the Glorp descriptors and then the Magritte descriptors, or vice versa.
The goals of this project are:
- Detect common aspects of both frameworks
- Compare implementation of those common aspects in both frameworks, and choose/compile "best" one
- Detect any limitations of one framework revealed by comparison with the other
- Refactor the stuff, splitting it to three groups: "common metamodeling", "Generic ORM" and "GLORP-related"
- Cleanup GLORP from "common metamodeling" and "Generic ORM" stuff.
The output is both a refactored codeset with three level of abstractness, and an analysis of why functionality was splitted in this exactly way.
Glorp and Magritte have good test suites. XP development to ensure existing facilities remain functional will protect the student from breaking some facilities as they experiment with refactorings. Maintaining, where possible, deprecated methods that call new API in terms of old API may be appropriate in the project, and may also assist introduction of the results to the community.
There are at least two projects to observe, one is for magritte-based SQL mapping without GLORP, another one - generator of simple GLORP mappings with Magritte descriptors.
Maybe it will be necessary to make some tools for describing domain-specific Magritte things. For example, something like "with this domain-specific descriptor you should use this domain-specific memento for caching".
Benefits to the Student
Glorp and Magritte are two meta-modelling/mapping frameworks with impressive capabilities solving real problems: the student who does this project will acquire significant practical knowledge of this kind of meta-modelling. Glorp and Magritte are also important parts of one way of writing web applications: the student who does this project will have skills that can be turned to practical account in web development.
Benefits to the Community
Decreasing complexity and entry level for projects with both Magritte and GLORP inside (a lot of enduser applications really).
Increasing quality of both Magritte and GLORP. Decreasing complexity of GLORP, which is very complex now becouse of all the stuff for meta-describing inside.
And avoiding double-efforts in future, so when we'll upgrade Magritte, we'll upgrade GLORP simultaneously.