You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Error formatting macro: include: java.lang.IllegalArgumentException: No link could be created for 'TOOLS:Header, Design'.

Currently events are handled very bad since everything is subscribed to everything (Project explorer to Model.DataItems.Added/Removed, Folder.DataItems.Added/Removed, etc.). As result it makes things very difficult to manage when objects are added / removed. Especially when these subsciption happen in external plugins (HABITAT, Verkenner...).

Better way to inform containers of the collections is to inform parent about changes (INotifyPropertyChanged) of the underlying object or let only container subscribe to collection contained in it.

In a few words:

Arrows show what object is subscribed to what.

Allowed Subscription of events

Unknown macro: {flowchart}

"Container" -> "IEventedList<SomeType>" -> "SomeType"

Unknown macro: {flowchart}

"Gui Form1 where SomeType is a Model" -> "SomeType"

Unknown macro: {flowchart}

"Gui Form1 where Container is a Model" -> "Container"

Anti-Pattern

Unknown macro: {flowchart}

"Gui Form1 where Container is a Model" -> "Container" -> "IEventedList<SomeType>" -> "SomeType"
"Gui Form1 where Container is a Model" -> "IEventedList<SomeType>" [ label = "FORBIDDEN" ];
"Gui Form1 where Container is a Model" -> "SomeType" [ label = "FORBIDDEN" ];

In general the rule is: when you need to Subscribe / Unsubscribe frequently to events - you have to review your design of how event subscription is organized.

Consequences for DelftShell

  • Refactor all subscription of events in ProjectExplorer, HABITAT, etc.

Points of interest

  • INotifyPropertyChanging in .NET 3.5
  • WeakEvent in .NET 3.5
  • No labels