Sparx Systems Forum
Enterprise Architect => Automation Interface, Add-Ins and Tools => Topic started by: supplyondemand on August 01, 2012, 12:27:08 am
-
I asked Geert for the main benefits of his Add-in-Framework. I share his answer here because I think it might be interesting for others as well:
I once wrote an elaborate article on a wiki about this, but unfortunately that project was cancelled, and the wiki has been taken offline.
Anyway, the short version is that I want my tools to work on an UML model, not on an EA model.
My requirements are also usually expressed in the form UML elements and not EA elements. So I made an UML abstraction layer with interfaces that represent the UML metamodel.
The EAwrappers then implement the UML interfaces.
Now my tools don't have to know how a certain UML construct is implemented in EA, they just use the UML metamodel.
One of the advantages is that I now can port my tools rather easily to another UML tool. I only need a new layer of wrappers implementing the same interfaces, and the rest stays the same. (I actually needed this in the past when migrating from Rational Rose to EA, and I was very glad I did use this kind of wrapping back then)
Another reason (which is not demonstrated in my libraries) is that at a client the modelling method usually has some kind of meta model based on standard UML.
When I'm developing tools for I client I create another layer (ClientMetaModel) wrapping the UML interfaces.
All tools created for this client will then use the ClientMetaModel wrappers to really adjust to their modelling method. That means that if a client defines rules for certain elements (say: classes with steretoype <<appInterface>> are not allowed to have attributes) in their metamodel we can implement those rules in the ClientMetaModel
I know, just written out like that it seems complicated, but I've been using this architecture for quite a few years now, and in the long run this is the most effective and robust.
If I ever find the time I'll try and re-write that article about the architecture behind the EAAddinFramework.