History of clean architecture
Elegance in design is a lack of unnecessary complexity.
In the last few years, the topic of clean architecture has really caught fire 🔥 in the Android community. A quick google search reveals that discussions about the topic only started to emerge as recently as 2014. Also don’t forget Android itself has only been around since roughly 2009.
Clean architecture as a principle of software development on the other hand has been around much longer.
In the 1960s and 1970s software systems did not have the concept of a graphical user interface (GUI) like we have today. As GUI systems became popular in the 1980s and 1990s they drastically improved user experience. They also introduced a whole new host of challenges for developers.
- How to handle user input?
- How to keep view state in sync with the underlying application?
- How to best separate presentation logic and domain logic?
One of first examples of clean architecture as we know it today is the Model-View-Controller (MVC) pattern developed for Smalltalk in the 1980s (which of course later became the basis for Objective-C and how its used in iOS).
Early Android development did not do a very good job of answering these questions. Fortunately over time the ecosystem has evolved and now we have tools like data binding, RxJava, and architecture components. Also clean architectures patterns like MVC, MVP, and MVVM, have become more commonplace.
However with more tools and choices also comes a greater degree of complexity that can lead to analysis paralysis or design patternitis.
That’s why I think it can be helpful to look at the topic of clean architecture from an historical perspective. What lessons can we learn from classic software design principles, and how can we best apply them to modern Android development?
Those who cannot remember the past are condemned to repeat it.
— George Santayana
This is the first post in a new series I am writing about clean architecture on Android. In it we are going to explore classic software design principles and patterns for clean architecture, and hopefully gleam some useful insights about how they can be applied to modern Android development, with the goal of making our applications even more robust, maintainable, and testable.
If you found this article helpful, please give it some applause 👏 to help others find it. Feel free to leave a comment below.