What is Exo?

Exo is a set of open source .NET libraries that make dynamic web programming both fun and compelling.  Exo represents a model-centric programming paradigm that seemlessly allows you to manipulate your domain model both on the server in comfortable .NET languages and on the client as a rich Javascript model without the compromises and limitations found in today's web frameworks.  Exo consists of three core libraries:

  1. ExoGraph is a clean abstration layer that can sit on top of any ORM and exposes the domain model of your application.  ExoGraph supports robust eventing that allows subscribers to respond to changes in the underlying model or manipulate the model itself - without having a direct dependency on the model classes or the underlying ORM you choose to use.  Most users of Exo will never need to understand how ExoGraph works, but its model-centric event-driven approach enables innovations like ExoRule and ExoWeb.

  2. ExoRule builds on the fabulous eventing provided by ExoGraph and allows you to create rules using standard .NET code that run automatically by responding to changes in your domain model.  This automatic rule chaining logic is normally the stuff of commercial rule engines, but ExoRule makes this both easy and free for all developers.  Specifically, rules can run during object initialization, as a result of changes to property paths, when properties are accessed (calculated properties), or even due to domain events that are explicitly raised.  Additionally, ExoRule allows you to attach errors or warnings to entities in your model, which in turn can then immediately be reflected in the UI of your applications.

  3. ExoWeb is where the all the magic of ExoGraph and ExoRule starts to shine in the glory of dynamic web programming.  Standard jQuery, MS AJAX, and other client-side Javascript frameworks support rich client-side programming models, but essentially eliminate the value of rich server models by forcing you to perform all of the changes to the model on the client (in Javascript, yikes!) and then just call the server to save your changes.  ExoWeb turns this upside-down by supporting a two-way stateless change-shipping approach, where the client can send model changes to the server, and the server can asynchronously respond with changes resulting from the changes on the client, in a continuous cycle.  These changes can include both structural changes to the model (data) and conditions of the model (errors, permissions, etc.).  You create your UI view-model by simply extending the Javascript projection of the server model, defining client-side rules, calculated properties, validation, etc., but at the same time you have the option to round-trip changes to the server to trigger server rules, raise domain events on the server model, or even call methods on your server model entities (and get back the results as Javascript model data!).

The following diagram shows how each of these libraries fit in with your existing technology stack.  ExoGraph supports any .NET ORM via type providers.  ExoRule supports defining rich rules for any domain model via ExoGraph eventing.  ExoWeb supports any .NET web technology (WebForms, MVC, etc.), operating as a simple handler to process requests in parallel with you existing web application logic.

Exo Stack Diagram

Use Exo where it make sense--for those complicated user experiences that just require crazy amounts of user interaction and complex business rules.  Exo makes impossible -> possible, and difficult -> easy.

Have fun!!!

The wonderful Exo Team at VC3