A detail overview of the existing software architectural approaches
Software development can be described as a complex systemic process that requires expertise in various spheres of technology as well as the concerned business. An integral part of this software development process is facilitated by defining the architecture of software just like a blueprint of a master plan.
Why We Need Software Architecture
Big Ball of Mud
Earlier developers use to design architecture-less softwares which intially appears like an advantage of not having a planning overhead as well as faster protoyping. But as they dwell deeper into the process, the software becomes inflexible and unmanageable just like a mud ball. As each and every change becomes costlier, this approach was later termed as Big Ball of Mud
Such project becomes unmanageable with time and hence enhance the maintenance cost drastically with every new iteration. This restrict the software to evolve beyond the boundaries initially defined in the beginning of project.
Over the years of evolutions in software design, world of developers have come up with few robust architectural approaches in order to avoid the issues of architecture less software design (also known as Big Ball of Mud). Following are some of the most famous ones
Service Oriented Architecture (SOA)
This approach works on principle of separation of concerns. Software design is divided into layer laid over one another. Each layer performs a dedicated responsibility. Architecture divides the software into the following layers
Business Logic Layer
Data Link Layer
Presentation Layer holds the user interface that interacts with the outside world. This is also responsible for providing user experience as this is the only layer exposed for interaction to the end user.
Business Logic Layer as the name suggest hold the business logic for the software application. This layer detach UI/UX from business related computations and hence provide a flexibility to modify the logic depending on constantly changing business requirements without having any affect on other layers.
Whereas Data Link Layer keeps the responsibility of interacting with persistent storage like databases and miscellaneous data processing which is not domain specific (ie. not related to the business)
Data and control flows from one layer to another crossing every layer in design. These layer also increase the degree of Abstraction in the design. As stability is proportional to abstraction to certain extent , it also improves stability of software to some limit.
Layered Representation of Architecture