Project Description
ExoGraph is a graph library that leverages type information to optimize graph operations and notifications. The library exposes type-level events for object initialization, property retrieval, property path changes, and custom domain events within a graph context. C#

The ExoGraph library is designed specifically for developers working to extend rich object models through efficient graph eventing instead of through traditional sub-classing. While the project derives inspiration from the QuickGraph project, it differs significantly by introducing the notion of a type schema in order for consumers to subscribe to graph events at the type level and receive notifications at the instance level with minimal overhead.

The library is composed of three key parts:
  1. The GraphContext is the middle man that exposes all key graph operations and events and caches type schema information. Multiple graph contexts may exist concurrently on the same thread and multiple separate instance graphs may exist within a single graph context. The graph context does not have references to graph instances. Instead, instance vertices and edges have references to the context in which they are bound.
  2. Graph adapters notify the GraphContext of changes as they occur in the real instance graph. Since the instance graph could be virtually anything, from an nHibernate or Entity ORM object to a user interface control, adapters are necessary to provide object model flexibility while still enjoying the rich graph operations and events available through the GraphContext. The adapters must notify the context when instances are initialized, properties are fetched, properties change, lists change, or custom domain operations are invoked.
  3. Graph subscribers register for graph events exposed by the GraphContext at the type level. As change in the instance graph occur, adapters notify the GraphContext, which in turn notifies subscribers. However, the notifications are more than simple pass through operations. For example, subscribers can register for notifications of changes to an entire property path and be notified when any portion of the path changes, not just a specific property. Additionally, subscribers can temporarily delay notifications using a GraphEventScope when performing significant graph changes. Finally, subscribers can create graph filters that expose a list of instances in the graph below a common root along specific property paths, which automatically update and raise notification events whenever instances are added or removed from the filter based on changes in the underlying instance graph.

Last edited Oct 12, 2009 at 1:47 AM by jamiemthomas, version 2