In the distributed computing world, we learned to separate the concerns and distribute the tasks across several different (micro) services. This approach is good for scalability purposes but opens a great dilemma in the context of versioning. The communication among these services is difficult to maintain every time there is some change in the respective models. These difficulties are even more troublesome in event-sourced-based architectures where stored events may have a different version over time.
In this talk, we will take a new approach that is based on semantical metadata and .NET code-generation techniques that let us free to evolve the models with no need to re-compile or restart the consumers. The sample code is entirely based on .NET and the Roslyn C# compiler.