Недавно я читал веб-сайт о разработке чистого кода (здесь я не размещаю ссылку, потому что она не на английском языке).
Одним из принципов, рекламируемых этим сайтом, является принцип Open Closed : каждый программный компонент должен быть открыт для расширения и закрыт для модификации. Например, когда мы реализовали и протестировали класс, мы должны только изменить его, чтобы исправить ошибки или добавить новые функциональные возможности (например, новые методы, которые не влияют на существующие). Существующая функциональность и реализация не должны быть изменены.
Я обычно применяю этот принцип, определяя интерфейс I
и соответствующий класс реализации A
. Когда класс A
стал стабильным (реализован и протестирован), я обычно не слишком сильно его модифицирую (возможно, совсем не изменяю), т.е.
- Если появляются новые требования (например, производительность или совершенно новая реализация интерфейса), которые требуют больших изменений в коде, я пишу новую реализацию
B
и продолжаю использоватьA
до тех пор, покаB
она не является зрелой. КогдаB
наступит зрелость, все, что нужно, - это изменить способI
создания экземпляра. - Если новые требования также предполагают изменение интерфейса, я определяю новый интерфейс
I'
и новую реализациюA'
. Таким образомI
,A
будут заморожены и остаются реализация для производственной системы до тех пор,I'
иA'
не достаточно стабильна , чтобы заменить их.
Поэтому, учитывая эти наблюдения, я был немного удивлен, что веб-страница тогда предложила использовать сложные рефакторинги , «... потому что невозможно написать код непосредственно в его окончательной форме».
Нет ли противоречия / конфликта между применением открытого / закрытого принципа и предложением использования сложных рефакторингов в качестве лучшей практики? Или идея в том, что можно использовать сложные рефакторинги во время разработки класса A
, но когда этот класс был успешно протестирован, его следует заморозить?