We start this season of the podcast with an overview or review of software architecture patterns and anti-patterns. This season will explore several of these, so it only makes sense to give ourselves a solid foundation for discussion. We have talked often about these, but a refresher never hurts.
Software Architecture Patterns Defined
As we often do, we can start with a definition from Wikipedia.
An architectural pattern is a general, reusable solution to a commonly occurring problem in software architecture within a given context.[1] The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. Some architectural patterns have been implemented within software frameworks.
Note that multiple considerations go into software architecture patterns. We should all know that software development is more than writing code. These factors are some of those items we need to be aware of.
The Value of Patterns
There is a lot of value in reviewing patterns and anti-patterns no matter what project we attempt. In effect, we are reviewing those that have gone before us and what was successful or problematic. Thus, we can learn from them and improve our odds of success. That is what patterns provide for us. Much like other patterns, there is a general approach to a problem lined out for us to adopt. As with all patterns, these are not the complete solution. Instead, think of these as guidelines to help you craft your solution to your unique problem or situation more quickly. We can avoid starting from scratch with these tools to guide us.
Frameworks and Patterns
You will see that many of the software architecture patterns we review show up in software frameworks. That is an example of the value these bring. They provide a foundation for your code that makes it easier to communicate among modules and interact with other systems. Architecture is often a set of guidelines and hooks for a solution. Therefore, this is a perfect area for patterns to emerge and be utilized. When you do this, you will find your team more productive, and higher quality results are an outcome.