[Time: 1 min 45 secs]
As we have said earlier, software is rarely ever made and forgotten. After the release, there will be change requests, there will be requests for new features, and bugs to be fixed. And why after the release, even when we are in the process of making software we have to interact with code that has already been written. It is with the goal of easing all of these, that we design software.
The design should enable flexibility, extensibility, and maintainability.
[Time: 9 mins]
FLEXIBILITY
- What is flexibility?
- Actions for change
- Identify, Change, Test
- Detractors of flexibility
- Complex code
- Lack of clear responsibilities for classes and methods
- Unreadable code
- Repetitions in code
- Uncontained functionality
- Design decisions that promote flexibility
- DRY (Don't repeat yourself)
- KISS (Keep it simple)
- No tricks
- Loose coupling
- Encapsulation
- Note: Minimize testing
[Time: 6 mins 25 secs]
EXTENSIBILITY
- What is extensibility
- Actions for extensions
- Actions for change, adding classes
- Detractors of extensibility
- Same as detractors for flexibility (ideally we want to extend the software by adding new classes and not modifying existing classes)
- Design decisions that promote extensibility
- Loose coupling
- Assigning proper responsibilities
- Proper use of inheritance and polymorphism
- Design patterns
MAINTAINABILITY:
- Maintainability is flexibility + extensibility + bug fixes + refactorings
- All design idioms for flexibility & extensibility apply to maintaibility also. Besides these design factors, some process factors like having proper test cases, and good documentation also apply. But since we are focussing on design in this section, we will not take any process related issues.
- Remember "maintainability" is the ultimate goal of software design
Note: This post was originally posted on my blog at http://www.adaptivelearningonline.net
Comments