As we discussed the design evolution in previous section, we have already hinted at the criteria that ensure design quality:
- It has to be flexible enough to adapt to the incoming changes (they are as inevitable as taxes, so you'd better be ready)
- It has to clearly communicate the project structure and specialization of each part
- It has to use well-defined domain terminology
- It has to allow testing parts in isolation and integrated together
- It has to be presented in a form that allows us to discuss it with the future customers and, ideally, is tested by them
- It has to take full advantage of the four OOP concepts—encapsulation, interface, inheritance, and polymorphism
Those are general criteria for any project and ...