Paolo;
I'm not familiar with your project. What is the input to your process?
Hi Jim,
The output I produced above was the untransformed output from an EA Model via the UMLPlus Interface I've developed. It's not the final product, but an other proof of concept to the final goal: To produce artifacts (in various languages and in various formats) from a single source with as high a level of abstraction as possible.
One of the hardest things to produce would be source code. So, in line with
Agile approaches, that's the one I did first.
I have developed a set of modelling technologies that, I believe, allow me to create quite reasonable models of the world - which in Model Driven Architecture (MDA) terms are closest to Computationally Independent Models (CIMs).
We MDAers assert (and so far so good) we can follow the MDA chain and generate Platform Specific Models (like the output above).
As I mentioned I decided I couldn't wait for EA to catch up, and to be fair, I wanted to generate much more than code - a verbalisation of the model in English narrative, test instructions, other documentary artifacts which EA couldn't provide.
Also, since my modelling technology is richer than just code generation, I needed to impart this metadata to the generators. So I split the process in two:
- Modeling - using a suitable Modeling tool (EA), emitting the model onto a defined two way interface (in this case in XML - which allowed me to create a formal XSD which checks that the XML interface output is structurally and syntactically valid)
- Generation - using a suitable set of generation technologies (CodeSmith + CodeDOM).
This particular project started when I moved my CIM from Rose to EA. I needed the verbaliser I had created in Rose to allow non-modelling Domain Experts to validate the business rules encoded in the CIM by reading the English narrative the verbaliser produces.
Rather than embed the verbaliser as an Add-In (which I will do down stream) I decided it would be better to generate it off-line via the interface. I then realised I could generate all sorts of stuff off the same interface if I made it a bit richer...
Some colleagues couldn't get their heads around the concept so they challenged me to generate some code...
Thus here we are...
Now, since we are in a Supply chain, from CIM to PSM, the source model I'm currently outputting from is closer to a PSM than anything else. When I sort out how to get a PSM across the UMLPlus interface, I'll look at getting a Platform Independent Model (PIM) across the same interface and performing the PIM to PSM transformation on the generation side of the interface.
Since MDAers assert that you can take a CIM an via a repeated set of transforms create PIMs and PSMs, I should eventually be able to take a CIM (and transformation rules) across the UMLPlus interface and generate PSMs on the downstream side...
Here's hoping...
Paolo