This post originated from an RSS feed registered with .NET Buzz
by Jonathan Crossland.
Original Post: What I want from a modelling tool
Feed Title: Jonathan Crossland Weblog
Feed URL: http://www.jonathancrossland.com/syndication.axd
Feed Description: Design, Frameworks, Patterns and Idioms
Case tools, Modelling, UML, you name it, we have had the dream. We have built the tools. We have designed and bashed heads on semantics and special interests. Now the compromise is still not good enough. When a team of people begin to compromise design and philosophies you get a ViewPointMixture. A ViewPointMixture: a mixture of good ideas from various people for various reasons = Bad design (most of the time).
Not all good ideas work well together, albeit a good idea in itself. Most tools then become technical. UML is a technical specification, therefore the tool reflects a 1 to 1 mapping. I don't necessarily want that to always be the case.
With that said, this is what I would like to get out of this space. I would like 3 phases of activity/
Sketch Time, PlayDoe Time and WorkTime
Firstly a tool must allow me to sketch. I should be day dreaming, thinking, designing. Nothing is concrete. I like using a pencil tool for this. But I draw like a 3 year old, so I need the tool to help me a bit. Perhaps it can soften my curves, straighten my lines. Not Dead Straight, just straighter.
The tool should allow me to draw any shapes I want. rectangles that look like packages or components, it doesn't matter at this point. I draw lines, it does not matter if it looks like a generalization arrow or not. i am sketching and I know what I am drawing, I don't need interference, just gentle assistance.
PlayDoe Time
Now that I have some "shapes" and "lines" on the canvas from my sketching, I want to formalize it a little bit, move things around and solidify things one step at a time.
I want to click on a shape, that I am sure will be an Interface, and then it makes it so. The colour is slightly different, it straightens the shape a bit more (but not completely), and it adds an Icon, symbol on the shape representative of an Interface. Now looking at it, I can see its an Interface, not cast in stone, but more formal than my original sketch. I can then systematically alter any shapes I want, pointing out boundaries. I draw a box around a group of shapes and mark it as "Server", and draw a box around bunch of shapes and call it components. I then draw another shape around those shapes and call it package. With each declaration of intent, the graphic becomes that little bit more finalized and clean, but not cast in stone.
WorkTime
So now I have the sketch, that has become playdoe, that has a little more metadata and structure, I can now decide to formalize it, one shape at a time, or do the whole lot for me at a single click. If I don't like the result, I go back to PlayDoe and add a little more metadata to define it a little more. Once again I click the create button to formalize the PlayDoe, and it results in something I want. Now I can Sketch on top of my WorkTime canvas. Which begins the cycle and applies the layer to the WorkTime model, when I want it to.
Now we come to Code Generation
The industry struggled with this for a while. But it is clear we must have a mixture of one way generation, Reverse Engineering or Round Tripping. Now we understand that we have to take bridge the gap between the design in a Model and the code the developer writes. However, fine grained control is required and I think that the idea of PlayDoe or something similar could help us with seeing our code and models in a semi concrete fashion distinct from the concrete classes.
So if I am designing some new things in a sprint, then until I commit, I don't want to affect the existing classes and code. i want to sketch and play and then commit it.