Link |
Unknown macro: {div} https://www.tutorialspoint.com/software_architecture_design/key_principles.htm |
Title |
Software Architecture & Design |
SWE or Topic |
SWE-058, |
Citation |
Tutorials Point, Simply Easy Learning web site |
Notes |
|
Example Reference as it will appear to end user:
- Title, Citation
where:
- Title = Title
- Link = http://www.nasa.gov
- Citation = Citation
Quotes used in SWEs and Topics
- SWE-058 - Detailed Design - tab 7, from Key Design Principles
Following are the design principles to be considered for minimizing cost, maintenance requirements, and maximizing extendibility, the usability of architecture ? Separation of Concerns Single Responsibility Principle Principle of Least Knowledge Minimize Large Design Upfront Do not Repeat the Functionality Prefer Composition over Inheritance while Reusing the Functionality Identify Components and Group them in Logical Layers Define the Communication Protocol between Layers Define Data Format for a Layer System Service Components should be Abstract Design Exceptions and Exception Handling Mechanism Naming Conventions
Divide the components of the system into specific features so that there is no overlapping among the functionality of the components. This will provide high cohesion and low coupling. This approach avoids the interdependency among components of the system which helps in maintaining the system easily.
Each module of a system should have one specific responsibility, which helps the user to clearly understand the system. It should also help with the integration of the component with other components.
Any component or object should not know the internal details of other components. This approach avoids interdependency and helps maintainability.
Minimize large designs upfront if the requirements of an application are unclear. If there is a possibility of modifying requirements, then avoid making a large design for the whole system.
Do not repeat functionality specifies that functionality of components should not be repeated and hence a piece of code should be implemented in one component only. Duplication of functionality within an application can make it difficult to implement changes, decrease clarity, and introduce potential inconsistencies.
Inheritance creates a dependency between children and parent classes and hence it blocks the free use of the child classes. In contrast, the composition provides a great level of freedom and reduces inheritance hierarchies.
Identity components and the area of concern that is needed in the system to satisfy the requirements. Then group these related components in a logical layer, which will help the user to understand the structure of the system at a high level. Avoid mixing components of different types of concerns in the same layer.
Understanding how components will communicate with each other requires complete knowledge of deployment scenarios and the production environment.
Various components will interact with each other through data format. Do not mix the data formats so that applications are easy to implement, extend, and maintain. Try to keep data format the same for a layer, so that various components need not code/decode the data while communicating with each other. It reduces the processing overhead.
Code related to security, communications, or system services like logging, profiling, and configuration should be abstracted into separate components. Do not mix this code with business logic, as it is easy to extend the design and maintain it.
Defining exceptions in advance helps the components to manage errors or unwanted situations in an elegant manner. The exception management will be the same throughout the system.
Naming conventions should be defined in advance. They provide a consistent model that helps the users to understand the system easily. It is easier for team members to validate code written by others and hence will increase the maintainability.