Hello, I think models repositories are really important for teamwork purposes in big companies, with large models split in lots of modules. So I'm wondering what's the existing tools for managing models? I only know the TeamWork plugin for MagicDraw.
And what is your feeling about models repositories, what's the clues?
Well, ABSE revolves around the notion of an Atom Library, which is a metamodel repository. In fact ABSE is totally dependent on it. You build an ABSE model by instantiating metamodels from the Atom Library. There is no other way in fact, so you must always create and then reuse.
Since Atoms also feature construction constraints, the Atom Library can teach, guide, or otherwise force developers to follow an established architecture. Description and other Atom Parameters that the repository creators might wish to add will guide the developer in the model discovery process.
However, these Atom Libraries are only used to manage ABSE Atoms.
If you don't know about ABSE you can learn about it here.
The company where I work have a model describing its whole business logic. This whole business logic is split in smaller models. Each of these represents a delimited/hermetic field of the business logic (urbanism). Each field can evolve/change separately.
Then, on the top of these business units, you can gather the ones you want in order to model the flow of business objects which are exchanged between the layers of the software.
The context I describe require two needs :
- The first one is being able to load business units in your object flow model.
- The second one, because business units can evolve over the time, is the need to version them.
The goal of splitting a model in smaller ones is to minimize the merging problems.
The aim of model repositories (a repo like maven repos for instance) here is to provide "models on the shelves".
I started an implementation on top of maven2 and nexus. Re-using the concepts of release version ans snapshot version for models.
You might be interested to check MetaEdit+ as it comes with a repository which can store billions of design elements. So it scales differently than file-based tools. Also the multi-user capabilities provide concurrency at a very fine-grained level allowing multiple developers to work on the same model, a diagram, or even on the same design object. This minimizes significantly the merging needs, and as you said, provides support for reuse.
Since MetaEdit+ is a tool for Domain-Specific Modeling the repository not only stores models but also the metamodels, generators and notations. This is particularly important in any bigger use because then the latest modifications to modeling languages and code generators are available to all users in real-time: there is no need to compile a language prior to making it available.