Prerequisite : Fundamentals of Software Architecture
Software Architecture Design :
Software architecture design, software architectural modelling or software architectural patterns are used to represent how the system will act on the basis of software elements, relationships and properties. It is mostly used as the blueprint of the project which is to be built. Software architecture design helps to connect the technical and operational aspects by defining and structuring a solution. The architecture and designing part can be broken down into two pieces
- Software Architecture –
Architecture defines the blueprints of a system. It serves as a communication and coordination mechanism for the elements. It designs a structured solution while keeping the performance, security etc. in check. It impacts the quality, maintainability and overall performance of the system.
- Software Design –
Software design is the method of coming up with a plan that takes the user requirements, available resources to find an optimal design. This lays the path for the developers and the managers to develop the project to meet the customer’s demands.
Importance Of Software Design Architecture :
- Bring the focus onto the structure while keeping the implementation hidden
- To address the demands of the customers
- Optimal use of resources while providing effective product
- Improve the trust in the organizations
- Realize the use-cases and scenarios
- Predict the product release beforehand
Software Architecture Design Factors :
When a structured framework is designed for the product to conceptualize its behavior, software elements and relationship etc. in that case different aspects related to the software product are considered for designing the software architecture. The below figure represents all these factors.
Major Goals Of Software Design Principles :
- Establishes a bridge between business and technical requirements
- To identify those requirements that concern the structure of the project
- To make the project’s architecture scalable, stable and testable
- Consider the overall consequences of the decisions
- Make the project flexible
Design principles :
When different design principles are followed during software architecture design it not only makes the designing process simpler but also it results easier and faster development of the product with low cost, low effort, and minimized requirement maintenance and follow-up.
- Separation Of Concerns –
This principle states that the software should be distinguished based on the working of the software. For example this can be achieved by segregating the business model from the implementation part so that the different people concerned for each module do not have to worry about the other one.
- Encapsulation –
It helps in hiding parts of application from the other parts. This helps in improving the project as it ensures changes in one part will not affect to the other part of the application.
- Don’t Repeat Yourself (DRY) –
Avoids the duplication of the functionality which comes within a single application. Means avoids repetition and implement one piece of code for a single component. This principle will decrease the complexity of the application.
- Principle of Least Knowledge –
It is also called as LoD (Law of Demeter) which helps in avoiding interdependency in between the components. As the components are unknown about internal architecture of the product which contains other components or objects.