Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{include:Header, Design}
{scrollbar}

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.

h3. Allowed Subscription of events
 
{flowchart}"ContainerSomeHighLevelType" -> "IEventedList<SomeType>" -> "SomeType"{flowchart} 

{flowchart}
"Gui Form1Form containing instance of SomeType" -> "SomeType"
{flowchart} 

{flowchart}
"Gui Form1Form containing instance of ContainerSomeHighLevelType" -> "ContainerSomeHighLevelType"
{flowchart} 

h3. *Anti-Pattern*

{flowchart}
"Gui Form1Form wherecontaining Containerinstance isof a ModelSomeHighLevelType" -> "ContainerSomeHighLevelType" -> "IEventedList<SomeType>" -> "SomeType"
"Gui Form1Form wherecontaining Containerinstance isof a ModelSomeHighLevelType" -> "IEventedList<SomeType>" [ label = "FORBIDDENDON'T" ];
"Gui Form1Form wherecontaining Containerinstance isof a ModelSomeHighLevelType" -> "SomeType" [ label = "FORBIDDENDON'T" ];
{flowchart} 

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.

h3. Consequences for DelftShell

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

h3. Points of interest 

* INotifyPropertyChanging in .NET 3.5
* WeakEvent in .NET 3.5