pattern and practices
-
CloudEvents as a Data Product

TL;DR Treat CloudEvents as the envelope for versioned, traceable domain aggregate snapshots. Use the CloudEvents contract for transport and a versioned aggregate schema in data to make events reliable event-based data products for analytics, ML, and agentic workloads. This post expands on the Event as a Data Product pattern I introduced in my previous article. At its core: treat domain aggregates (your key Continue reading
-
How to simplify complex logic using declarative coding in C#.
Every now and then we get to implement very complex logic and there are various ways to manage the complexity. In my 3 Posts series, I have discussed how we can handle complexity introduced by the multi-tenancy aspect of the business logic. I recently came across a logic, which was going to create a maze Continue reading
-
Multitenant Application – Part 3: AOP in MVC to develop multi-tenant and regional applications
This is my third and last post in the series of writing multi-tenant applications. Before this I have discussed how to avoid if/else type structures and how context based dependency injection can help us do it efficiently. In this post I will focus on the UI side of the application. One of the main traits Continue reading
-
Multitenant Application – Part 2: Context driven dependency injection
Further to the previous post, object creation based on the current context is a cross cutting concern, so it should be dragged outside the core business logic. We have already tried creating a factory method to give us the required implementation. We will now replace this with a container to allow Inversion Of Control. The most simplest Continue reading
-
Multitenant Application – Part 1: How to write Multitenant or Regional code without if or switch statements?
Have you seen code like this and wonder how to make it cleaner? I often see a web of if/then or switch statements sprawled out to various parts of an application to provide a country or client specific code paths. Such conditional statements have their counterparts in other layers of the application. These corresponding conditional statements are consistently required to be Continue reading
