Imagine yourself as a child playing with Legos having as task to build a house.
Now you have a billion ways to achieve that but now few best ways among those which will consider having the best outline. The planning and designing of this finished product are what we identify as software architecture.
What is Software Architecture.
This is the fundamental underlying structure of a software. It involves the systems components, structure and design. In software architecture each building block of the software should be backed up by a reason to justify why it is present and why it was used that way. software architecture is also about making changes making cost-effective decisions.
Why Software Architecture?
Software architecture being the career presenting decisions related to the overall structure and behavior of a software, below are some few reasons to study it:
- Helps to reduce risks and chance of failure
- Enables cost reduction
- A comprehensive solution
- Blueprint for the system
- Risk identification
Types of Software Architecture Design.
Software architecture has several types, some of which include:
- Layered patterns: This is a fundamental software design pattern that provides a clear separation of concerns and promotes modularity and flexibility in software systems. It promotes the development of robust, scalable and maintainable software. It involves modules or components with similar functionalities are organized into horizontal layers where each layer performs a specific role. It mostly consist of 3 layers including a single presentation tier, logic tier, and data tier
- Client-Server patterns: Widely used in systems that enables efficient communication and separation of concerns between different system components. Example: email, network printing, the Worldwide Web and the weather widget on your phone is a software client.
- Event-Driven patterns: Event-driven architecture (EDA) is a system design practice built to record, transmit, and process events through a decoupled architecture. For example: the notification service is always listening for any events that require a user to be notified. When it receives a signal that someone has liked your photo, it processes this event.
- Microkernel patterns: A microkernel architecture pattern is a software design pattern that separates a system's core functionalities from non-core functionalities. It's also known as the plug-in architecture pattern. A microkernel architecture has a light core with reduced complexity. A classic example of the microkernel architecture is the Eclipse IDE. Downloading the basic Eclipse product provides you little more than a fancy editor.
- Microservices patterns: This process is a classic example of the event-driven pattern because the system's flow is dictated by events. Actions within the system (like sending a notification) are triggered by these events, rather than by a central controller dictating the flow of operations. This makes the system highly responsive, scalable, and flexible, as new types of events and handlers can be added over time without disrupting the existing system architecture.
More types
Some more architectural patterns includes: Broker patterns, Event-Bus patterns, Pipe-Filter patterns, Blackboard Pattern, Component-Based patterns.
Conclusion
It is a very difficult and technical task choosing the best architecture for your systems but Gotcha, I'll be right back in this series with the best architecture you can use after analysis of your system.
Top comments (1)
nice writeup. Please let me point out one subtle issue: Architecture is NOT only the underlying structure, but comprises also technology choices (usually independent of structure), infrastructure topics (deployment etc) and other cross-cutting decisions/concepts.
Proper architecture definitions encompass this somewhat broader understanding (like ISO 42010 and isaqb.org).
In addition, you might want to add another reason/argument PRO software architecture, namely achieving quality requirements like performance, scalability, flexibility, security or even safety. All of these don't just come by good structure or good programming, but need careful thought and usually loads of hard work.
I may point you to a (quite fundamental) series of posts on the same topic (I admit I'm the author...):