Thanks Paolo - very, very useful.
[SNIP]
Some definitions to start:
Modelling the Model
What do you mean by Type approach? I've been in similar organisations to you. We found that separating the objects from the viewpoints considerably eases the load. The viewpoints are organised by domain/subject area, while the items are organised by type.
We have/had a repository organised as you described above. Roughly speaking we had: all behavioural elements in a folder with the related diagrams, and all structural items in another folder will all related diagrams. Both, the behavioural and structural folder branches were subdivided into subfolders - e.g., classes and class diagrams were kept in a separate subfolder from components and component diagrams. Please note that I have oversimplified but it gives you and idea.
Our original approach, as you described, was to create viewpoints from that structure for specific domains - such as People and Organisations or Locations - or a particular Subject Area - such as Customer Registration or Online Sales.
This is where Sparx started to badly creak because, AFIK, there does not seem to be a way to a) collate all relevant elements
without physically copying them (please correct me if I am wrong), and b) once they have been collated into viewpoints to allow multiple projects/users to collaboratively change them (through the viewpoints, not the original package structure).
In addition, we found 2 other nasty problems: 1) matrices using the type/discipline approach are huge and largely unusable, and 2) the documentation artefacts were so long and flat that getting them reviewed and published become a inordinately lengthy exercise.
The alternative is “to model the model”: 1) to identify which domains and subject areas are needed, 2) how they roughly interact with each other, 3) create a package - please read folder and not model - for each one of them, and 4) breakdown each folder into behavioral structural folders in the way described above.
Domains are more abstract than subject areas. Domains (and certain subject areas) give us patterns. Subject areas intersect domains. When a subject area needs to use a domain element, it either consumes it as defined in the domain folder or specialises it with inherited attributes displayed in all class diagrams.
The only 2 exceptions are the organisational model and certain generic behavioural aspects which sit outside and above the “model of the model”, and domains which do not have a behavioural aspect.
At this point, I should say the to “model the model” we use stereotyped classes, using an MDG.
The resulting repository is no longer type/discipline centric but domain/subject area centric. As a result, it is very easily to give a group of users read/write access to specific domains/subject areas. With a type/discipline centric approach this becomes a challenge.
[SNIP]
We use the term Folder to mean a container in the model hierarchy. Some folders contain other folders and therefore denote a branch.
[..]
The term package is used to denote a branch that is transportable.
[...]
A repository root is a top-level folder.
With both structures, we tried to differentiate between model packages, which are easily transportable or baselineable, and folder packages which give structure to the models.
I find that the domain/subject area centric approach is more model friendly, more transportable, than the type/discipline centric approach. Without viewpoints, a type/discipline centric approach does not result on easily transportable or baselineable model packages; in our case they are simply too big.
[SNIP]
However, we also create "Namespace Roots" (at least conceptually) for branches that encompass a domain/subject area. We use the Version field to (effectively) group things related to the same namespace root.
Could you please expand?
[SNIP]
Sparx uses the term model self-inconsistently, so we avoid it. We use the term repository to mean the physical container for the various root folders and their contents.
I have noticed and find it mildly annoying. Sparx EA appears to force its users to use the Sparxian concept of a model immediately below the root and, out of the box (without an MDG), does not allow intermediate structural folders in between. Also the Sparxian concept of a model is type/centric and I would have less of a problem with it if I could put package folders (read place holders in between)
Incidentally, it occurs to me that the Sparxian concept of a model is not very
enterprisey, it is more suited for project work. Not that we will stop using Sparx for enterprise architecture.