Introduction to the Course
Let's learn about the basics of clean architecture.
We'll cover the following
Course overview
This course focuses on a software design methodology. A methodology is a set of guidelines that help us save time, implement advanced solutions to current or potential issues, and avoid the need to constantly brainstorm new ideas . In other words, it helps us achieve our objective more effectively.
Many professionals around the world like to share their experiences—often via blogs and talks at conferences—when they’ve discovered an effective and novel solution to a problem, so that others can also benefit from them. In this course we’ll also discuss best practices as well as anti-patterns. These will help us understand which methods to adopt and which to avoid when we’re faced with a particular problem.
Best practices often become defined as a methodology when they encompass a wide scope. A methodology offers more than just a specific solution to a problem and by nature is not limited to a specific case. Instead, it provides a wide and general approach to deal with the subject matter at hand. Methodologies aren’t ready-made shortcuts that we can apply without thinking to seemingly similar scenarios. It’s best to remember that methodologies help us discover the right solution and don’t necessarily provide the solution to us. This is why it’s good practice to learn why a methodology works, so we can decide if a specific methodology is what we need or if we need to findanother.
Clean architecture is an example of a methodology that pushes abstraction to its limits. One of the main concepts of clean architecture is that we need to isolate parts of our system as much as possible. If we do this, we can replace or modify specific parts of our system and leave other parts alone.
This requires us to set up a lot of abstraction layers, which may affect the performance of the system and may require greater initial development effort. We may think these added costs are too much, and we may be tempted to sacrifice clean code in favor of quick execution in order to save resources.
With methodologies, we’re always free to keep the parts we consider useful and to discard the rest. It’s recommended to keep track—either in design documents or commented code—of why we make specific decisions based on the specific methodology we use. This can serve as a future reference for ourselves as well as other programmers who may encounter similar scenarios and wonder why we applied a particular solution to a problem.
In this course, we’ll try as much as possible to give reasons for the solutions we propose, so learners can judge whether those reasons are also valid in their case. In short, this course offers possible solutions to particular problems, but these should definitely not be considered as the only good solutions to all the problems discussed
Spoiler alert: There is no best way to work.
Here is a brief overview of the course:
- A Day in the Life of a Clean System goes through a 10,000 feet overview of a system designed with a clean architecture.
- Components of a Clean Architecture briefly discusses the components and the ideas behind clean architecture.
- A Simple Coding Example runs through a concrete example of clean architecture.
- Add a Web Application expands on the example and adds a web application on top of it.
- Error Management discusses error management and improvements to the Python example in the previous chapters.
- Integration with a Real External System Postgres and Integration with a Real External System MongoDB show how to plug different database systems into the web service created previously. Run a Production Ready System wraps up the example and shows how to run the application with a production-ready configuration.
The target audience for this course is people seeking jobs in software architecture and software development. It’s also useful for those who are interested in DevOps positions. This course is also a great resource for educators and can help them teach intermediate-level concepts to their students.
Prerequisites
A basic understanding of the following concepts will be helpful for us in this course:
- Basic Python
- OOP in Python
- Test-Driven Development (TDD) in Python