architecturesoftware-designclean-architecturesoftware-distribution

Clean independent architecture


I have read in Uncle Bob's book clean architecture, chapter 21, that a good architecture must be independent of the delivery system that it will run in, be it web application, a console app or a thick client app.

Now supposedly that I want to develop the core of my software in c#, how is it possible that I could deliver it as a web client application? and vice versa, if I choose Typescript was my choice as a language, how can I deliver my app as a desktop app?

My is question is weather am I misunderstanding the concept pointed in the book, or is there someway I could write universal software in one language without relying in some framework?


Solution

  • If you write the core of your application in C#, you have several choices to deliver it as a web application: ASP.net, web api, and other frameworks. The idea is that the inner layers of your application (the use cases, the entities, etc are independent of that delivery mechanism.

    Same if you did it in Typescript, if you wanted to redeploy it using something like Electron you certainly could. Once again, it would be the inner layers of your architecture, not the outer bits (the services & the models).

    If you are depending on your UI framework in your inner layers, then you are not using clean architecture. It should be independent and isolated from it (if nothing else, just for testing).