Программные сущности (модули, классы, функции и т.д.) должны быть открыты для расширения, но закрыты для изменения (Бертранд Мэер)
- «Открыты для расширения», означает, что любой класс, метод, блок программного кода должен быть открыт для добавления нового функционала
- «Закрыты для изменения»: для добавления нового функционала в сущность, не должны вноситься изменения в код, который эту сущность использует.
Это дает нам возможность избавиться от регрессионного тестирования. Т.е. от проверки кода и функционала, который был протестирован ранее.
Как это осуществить. После того как вы написали Класс, вешаем на него «замочек». Далее код в нем изменяется только при bugfix-ах. Для расширения функционала мы используем наследование. Желательн имплементировать интерфейс.