Skip to main content
Software Alchemy

The Art and Science of Software Development

Architectural Template

This is the first in a multi-part series in which I will be building off the Foundational Concepts Series. My objective is to present actual, procedural steps that you can follow and apply to your own web projects using ASP.NET Core. As I present these steps, I will be updating the demo application accordingly, the goal being to evolve it into a working web application by the end of this series.

My objective is to demonstrate that Clean Domain-Driven Design works in modern web applications built on the ASP.NET Core stack. The desired end-product will be a multi-tenant SaaS product which can scale to accommodate complex business logic. I intend to revisit different areas of functionality in future blog series’, at which point we can make it more robust and enterprise worthy.

Architectural Template

This is an architectural template for building web applications which is based upon my interpretation of the Clean DDD and CQRS concepts that I introduced in the previous entry. To demonstrate this, I've created a demo application which attempts to solve a fictional problem for a fake organization. In developing this template, I studied solutions and tutorials from a handful of experts.

Clean Architecture

In this blog entry I give a primer on Clean Architecture, which is a modern, scalable formal software architecture which is appropriate for modern web applications. Next, I discuss how Domain-Driven Design fits into this picture, and how DDD concepts dovetail nicely into Clean Architecture, producing a methodology called Clean DDD. Finally, I introduce Command Query Responsibility Segregation (CQRS), and describe how it complements and enhances Clean DDD solutions to create software systems that are elegant, robust, scalable, and testable.

If Visual Studio is your samurai sword, then the C# programming language along with patterns and practices of structured software development are your fighting techniques, principles and disciplines. In this post, I'm going to talk about some of the features of C#, versions 6, 7, and 8. I've chosen to focus on these three versions because not only are they the most recent (obviously) but also because the style of language version releases started to change with version 6, focusing on a more frequent tempo and more granular features. Even more importantly, the syntax and feel of the language itself seemed to turn a corner with C# 6, marking what in my opinion is an evolving paradigm shift toward functional programming.

So you want to be a Microsoft (.NET) stack developer? Your head may be spinning from all the information out there and recommendations that you've either heard from other people or read online (e.g. Reddit). You might be feeling like you're being pulled in several directions.

I'd like to help you.

The purpose of this blog series, the Foundational Concepts Series, is to help introduce novice software developers to programming on the Microsoft stack. I first started coding when I was a kid and I've been using C# and .NET since 2003, so I'd like to think that I've learned a few things over the years. Even intermediate or advanced software developers may learn something new or fill in gaps in their knowledge from this blog series. My goal is to present the material in a fun and accessible format, so that the reader is left with not only a greater understanding of programming concepts and how to create quality software using one of the finest ecosystems out there, but also a passion for learning, so that you will continue to grow as a professional and as a person.