Jeremiah Flaga My thoughts and experiences on programming, life, atbp.

Clean Architecture Practice Project


(Originally written on March 21, 2017)

(The contents of this post might be outdated. The README in this project’s GitHub repository might have updates.)

Last year, I was able to read Uncle Bob Martin’s article titled “The Clean Architecture”. While reading that article I thought that he is just explaining how most software developers do architecture in the real world.

But two days ago, I learned that he is writing a new book titled “Clean Architecture” to be released this August 2017. (I’m going to buy that book.)

I realized that this “Clean Architecture” idea is new. I have to learn it. (Maybe it’s not really new; but maybe the majority of developers does not know about it yet?!)

While looking for examples of Clean Architecture I stumbled upon Matthew Renze’s website. (I remember that I saw this sample project about a year ago but I did not give it that much attention. Maybe because I did not yet understand some parts of the app?! Maybe. :disappointed:)

I tried to study Matthew Renze’s sample project through his slides. (He has a Pluralsight course on this. I will save some money to be able to access them later if things are not yet clear after reading Uncle Bob’s book.)

I also found the article “a Clean Architecture in .Net” by Stephan Hoekstra.


I’m going to practice doing clean architecture! In this practice project…

  1. I’m going to try to redo Stephan Hoekstra’s “Contact Real Estate Agent” project.

  2. Because I want to know what TDD is, I will try to write my tests first.

  3. Matthew Renze has a module named Specification in his project. I think he is trying to separate the tests for the specification from the unit tests. That is what I’m going to do in my practice project.

    Ahh! In his Git commits, he has this: “Added Specification project for acceptance tests”. So the Specification module contains the acceptance tests.

  4. In Stephan Hoekstra’s project, he has this Interest entity. But his House entity has this:

    public IList<Interest> Leads { get;  }

    What is this Leads?

    Ahh! So the Interest class is a “sales lead”. I’m going to use SalesLead instead of Interest. I’m not sure if this is correct, but I will use SalesLead because it seems more clear to me than Interest. I will just change it later if I find out that I’m wrong.

Happy coding!!! :smile: