|
Hi all,
Sorry for the long message, this probably is better suited for a blog, but I don't have one (yet).
In various threads issues have been mentioned that deal with handling large models. For example in In Multi-User Capability there is a question on multi-user capabilities, and in Collaborating on models? a solution is proposed.
In How to make Multiple Views a request for supporting multiple views has been done.
In Question on roadmap to DSL features a repository feature is requested.
We have been working with the DSL toolkit since November 2005. The first DSL's are now ready for production, several others are under development. Based on our experience with developing these DSL's, I would like to give some feedback on these requests. The main message I want to give is that it is very questionable whether features like views, repositories and model element based version control are needed at all. They are rather complex features and might introduce more problems than they solve. Let's take a look.
Views
The need for views arises from the fact that models are too big. Coming from the world of UML (which I certainly am :-) the first idea is that you need one big interconnected model that describes everything. Following this approach there is a clear need for views, because the full model is not displayable and understandable anymore. The question is whether there is a need for models to be big, or whether we are just used to that by our UML heritage. Within our software factory we have designed our DSL's in such a way that models remain small. For one DSL, we always create multiple models in a project. As a consequence we get more but smaller models. It does take a different point of view to modeling and to what models are.
We have found the approach of more and smaller models much more flexible than having less and bigger models. As each model remains small, the need for views dissappears automatically.
Reposititory
The need for a repository is clear in a UML environment, where we work with one big interconnected model. In practice, UML repositories are overly complex and hard to build and use. I have use many UMLm tools over time, but none of them solved this issue in a good way. Also, keeping all the invividual models synchronised with a repository has proved to be hard and errorprone.
In contract, we use many small standalone models, and have added to the DSL Tools a component that allows us to share some (not all!) specific information between models. This allows us to do full inter-model validation, such that we can guarantee that a collection of models is complete and consistent. The same component also allows us to use intellisense between models and can be used to perform refactoring over models. Models themselves use explicit reference elements to refer (by name) to elements in other models.
Modelelement based version control
I do not see version control of indivisual model elements as nesssecary. Having used many UML tools that try to achieve this I can only say that in my experience this never works. It only leads to an unnessecary complexity. Apart from that you always end up with non-standard version control systemns. When using smaller models, we can use standard file based version control. We all have much experience with these systems and they are known to be reliable.
More and Smaller Models
Using the approach of more and smaller models, we also find additional advantages. For example, resue of models becomes easier. Existing version management for sorce code be used for models as well, as each model is small enough for one modeler to work on. Just try to compare one model with one source code file. They are standalone entities, and the development environent can check and resolve any dependencies.
Conclusion
By moving into the direction of creating large repositories, views and finegrained version control for model elements, we will be tempted to design DSL's that will become larger and larger. In the end I fear that we will end up with UML implemented as DSL's. This will introduce all of UML's problems, which, as far as I am concerned, is exactly what we are trying to avoid. At least, I don't want to do this again.
Views and repositories are not requirements for a modeling environment. They are solutions to an underlying problem. I think that the underlying problem is that models are too big. We have found that the underlying problem can be solved in a very different way, using more and smaller models. TO se this we need to step away from the idea that a model must be one complete integrated whole. Instead we can view a model the same way as a source file and handle it as such. This has many advantages. I therefore think that the DSL Tools team should consider features in this area very carefully, since building them will take up considereble effort which I thin can be spent om more interesting features. I am interested whether other people have similar experiences. |