Ushering in paradigm shifts
There are two areas where it seems to us like the industry has been stuck in old models for more than a decade. Failing to realize and leverage the potential of paradigms that are already here. Paradigms which can fundamentally transform how we build systems for the better. Compze aims to help make these paradigms widely understood, accessible, and popular through developing tooling and writing documentation:
Semantic Events
Leveraging well established and understood C# features enables an event modeling paradigm which
- Gives an unprecedented ability to understand domains in terms of how the events that can occur relate to each other.
- Eliminates all need for manual event routing and type checking.
- Dramatically reduces the number of event subscriptions needed.
- Enables modeling inheritance and composition of event based aggregates with elegant precision.
- Unifies fine-grained property-updated style events and coarse-grained domain events.
- Enables subscribing to precisely the event you need, while being guaranteed that when new events are added, inheriting the current event, you will receive those too without needing to change anything in your subscriber code.
In spite of this, to this day, countless event driven applications are shock full of code that leverages none of these possibilities. Resulting in what can only be described as maintenance nightmares.
It's essentially the event equivalent of working in C# while completely refusing to use generics and object-oriented programming. Surely we should not even need to argue that this is ill-advised?
Browsable APIs
The most popular API in the world is a Browsable API (REST to be exact). You are using it right now. It's called the world wide web. Can you imagine trying to use it without links and forms? Imagine reading this page and instead of a link you are presented with: 4375.
That is actually how we build most APIs today. Why?
What if we designed Browsable APIs instead? APIs which:
- Can be fully explored using a
Navigator
, browsed much like a website, byGet
tingLink
sPost
ingCommand
s- All with full type safety and autocomplete in your IDE
- Can be in-memory, or remote
- Routes messages by .Net types giving
- Zero configuration routing
- A simple already well known programming model.
- Further encapsulates your domain, exposing less implementation details than traditional services.
- Are excellently suited for building a Just-Beneath-The-UI-Rendering-Layer layer, ideal for black box testing.
Once you used APIs like that, how would you feel about an API that gives you an int
instead of an ILink<User>
?