During my day job we recently did a code review of a small feature of an application which aims
to follow the principles of Clean Architecture.
At a first glance separation of concerns as well as basic principles of Clean Architecture were
followed. But a closer look revealed that some dependencies did not follow the Dependency Rule,
specifically there were dependencies from adapters layer to the frameworks layer.
During our design discussions which followed this observation I realized that this example
would perfectly serve for a case study on how to design a feature in Clean Architecture in detail.
Do you think Clean Code should be very well documented? Do you think code comments
should help the reader to understand what the code is doing? Or do you rather
prefer DRY principle with respect to code comments?
As a software craftsman Clean Code is one of my key interests so I started a YouTube channel
to provide practical coding tutorials on how to apply Clean Code principles.
In my first video I demonstrate that Clean Code does not only start when you write a new
component or add a new feature to some existing code base. Instead you can start applying
Clean Code principles and especially the Boy Scout Rule already while reading code.
Unless you are not completely new to our profession I am pretty sure you already heard
about “Domain Driven Design” (DDD). But maybe you think that DDD requires quite some effort which is only worth it
in big software projects and that it has to be done in the beginning of a project to be effective?
This is not necessarily true …
Here is a book which nicely demonstrates that DDD and Functional Programming (F#) are two great tools to tackle
software complexity in any software project, even in a small pet project:
It has been a while since my last post on “Implementing Clean Architecture”
but I wasn’t lazy ;-) In fact I was - apart from my day job - working on getting
Athena closer to the Clean Architecture. But there was one thing which puzzled me
for a while when implementing repositories:
In Clean Architecture
all details are restricted to the frameworks layer. The database is a detail.
all data conversion from the format most convenient for what ever persistence framework to the format
most convenient for entities and use cases, happens in the interface adapters layer.
How do I implement a repository in the interface adapter circle which accesses the TFS database using the
Microsoft TFS framework APIs? Isn’t that a violation to the Dependency Rule? In fact, isn’t any usage of a third party
API outside the frameworks circle a violation to the Dependency Rule?
Do you work in one of the cool “Lean Startups” with “DevOp culture”? No? Me neither ;-)
As a software craftsman you know that DevOp practices like Continuous Delivery, modular architectures,
trunk based development, test automation, working in small batches and Continuous learning do make a HUGE DIFFERENCE
when it comes to software delivery performance!
This is one of these books which try to help you achieving more of what is important to you.
It is definitively not the first book I have read about “being more productive” and “focus”, but
“Manage Your Day-toDay” gave me a few new insights and reminded my of some things I had learn some time back already but
got forgotten in the chaos of daily business.
In fact I think every software craftsman should read regularly - at least once a year - about “focus” and “productivity”.
It is all too easy to get lost in these many and “important” things which pop up every day on our desks and in our email in-box.
Could you also spent your whole day sending and responding to email just to wonder what you have done the whole day in the evening?
In the previous post I have discussed controllers and presenters.
I have shown you how I have implemented my controllers and presenters in the Athena project.
I was quite happy with my design so far but there was one thing which puzzled me …
In Asp.Net MVC a controller derives from System.Web.Mvc.Controller which creates a dependency from my controller to the Asp.Net
framework. Taking the Dependency Rule strict that either means my design is invalid or my controller actually belongs to the
In order to learn what others think about this design I have posted my question at
and had a discussion with @herbertograca.
In this post I will share what I have learned and how I solved the puzzle …
After having blogged with Jekyll for some while now I have found some convenient setup which makes me feel
quite effective. Today I want to share my setup with you. Maybe some aspects inspire you, maybe you want to
leave a comment about your own setup to inspire me?
I know it is more than three years old but if you are interested in Clean Architecture you should take your time and
watch it. Uncle Bob explains nicely - and a little bit funny as usual ;-) - what the Clean Architecture is about,
how the puzzle is built up and why it has to be like this.
And as a summary for this video and as an outlook to my next post here is the key message:
The post gives a nice introduction by first motivating clean architecture by looking at the
short comings of the traditional layered approach. It then gives some history about the Clean Architecture.
Finally the post briefly introduces the Clean Architecture itself - the circles and the dependency rule.
It was a nice read - looking forward to read the follow-ups.
According to Uncle Bob an architecture “screams” when it clearly expresses its core business purpose.
The top level folder structure, the project/DLL names and the namespaces should express business aspects rather
than frameworks or other details.
Athena is a web application implemented in ASP.NET MVC. But is this important?
I could switch to Ruby on Rails or Node.js - it wouldn’t make any difference for the business.
Why do we let such details impact our project structure so often?