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