Software Architecture: A 4-Dimensional View Link to heading
Software architecture isn’t a singular concept, but rather a multi-dimensional approach to building robust and adaptable systems. Let’s explore these key dimensions:
1. Architectural Characteristics
Architectural characteristics are the essential capabilities your system needs to possess. They determine how the system will perform, like speed (performance) and uptime (availability). These are also known as “ilities” for the suffix they often share (scalability, reliability, etc.).
Choosing the right characteristics depends on your priorities. For example, a high-speed search engine might prioritize performance over data integrity, while a financial system might value data integrity more.
2. Architectural Decisions
These are the long-term choices that shape your system’s structure. They act like constraints, guiding your development team. One example is deciding if your user interface talks directly to the database or goes through intermediary services. This decision impacts how both the user interface and other components access data.
3. Logical Components
Think of these as the building blocks of your system’s functionality. Each component performs a specific task, like managing inventory or processing payments. They have clear roles and responsibilities within the system.
Logical components are typically represented by directories or packages in the codebase. These directories group the source code responsible for a particular function, making it easy to find and maintain.
4. Architectural Styles
Imagine the architectural style as the overall layout. Different styles offer unique advantages. Microservices, for example, excel in scalability and agility, while layered architectures are simpler and less costly.
Choosing the right style is crucial, as changing styles later can be a major undertaking. A monolithic layered system wouldn’t easily transition to microservices.
It’s All Connected!
Remember, these dimensions are interconnected. The chosen architectural style should align with your desired characteristics and decisions. Similarly, logical components need to work harmoniously within the chosen style and framework. Neglecting any of these dimensions can lead to a poorly designed system riddled with limitations.
Reference Link to heading
Head First Software Architecture: A Learner’s Guide to Architectural Thinking by Mark Andrew Richards, Neal Ford, and Raju Gandhi
Note: I took these note while reading “Head First Software Architecture: A Learner’s Guide to Architectural Thinking by Mark Andrew Richards, Neal Ford, and Raju Gandhi”. I also used AI to clean it.