Catching more information in your model
Once you have started to travel the path of Model driven development you might find that the declarative approach is useful for even more things than what you thought of at first.
You may find yourself searching for a way to mark up certain classes as UserFriendly or an association as being HeavyToLoad, so that your code can see this and perform differently. Of course you can create code that checks if it used on a particular class or on a particular association, but that will eventually cost you in more maintenance.
We cannot and should not try to understand your future needs, after all you probably do not even know yourself yet. So what to do… Tag extensions…
Tag extensions definition
Brings up this dialog
You can create new extensions. In the example above there are 3 extensions, Kasper.Seeker, EcoExtensions and Kasper.
Each extension has a number of TagTypes – on the example above the Kasper extension has 4 tag types; Kasper.AutoSeekAndPick, Kasper.AllowUserNew, Kasper.UserFriendlyClass, Kasper.BusinessDeleteValue.
Each TagType is applicable to only one type of “TagExtendableItem” in the item. In the example above the Kasper.BusinessDeleteValue is active on Association end points.
A TagType can be made to act as a enumerable valueset, the example above allows for 4 values; PSCheckMustBeEmpty, MustBeEmpty, OkEvenIfNotEmpty and NoOneHasMadeADescisionForThisYet.
Tag extension usage
Once you have defined the tag extensions the property inspector is updated.
The Extensions shows up as any other properties of your modeled elements.
The values of the tag extensions are stored as tagged values and translated into .net code attributes in the generated code:
And you can access it in your code, either by using standard .net approaches to get to code attributes, or by using the extended meta information that ECO brings.
Tag extension visualization
Even if the Tag extensions has been in ECO and Gaffr.net for some time, a new way in how they can be displayed has been added recently. A new tab on the TagExtension dialog called Symbols has been added:
In this dialog you can define symbols that are built up by a piece of xaml:
Any stand alone xaml is valid to use here so you can define any kind of symbol you want.
You can then associate the TagTypeValues to a symbol:
And then your diagram displays the symbols when the values are set:
When hovering over a symbol, you get a tooltip that explains what tag extension it is and what the value is.
So start decorating your business models. Move stuff from your memory to Modlr for more people to see and for you to relax. Remember that development is still the hardest thing in world to truly master so accept any help you can get.