View on GitHub

wiki

Technical Excellence Wiki

Принцип общей закрытости [draft]

Оригинальный текст из книги Робертом Мартина Agile Principles, Patterns, and Practices.


Принцип общей закрытости (Common Closure Principle – CCP)

Все классы внутри компонента должны быть закрыты относительно изменений одного и того же вида. Изменение, затрагивающее компонент, должно затрагивать все классы в этом компоненте и только в нем.


Это не что иное, как принцип единственной обязанности (SRP) в применении к компонентам. SRP говорит, что у класса не должно быть более одной причины для изменения, а CCP – что то же самое справедливо и для компонента.

В большинстве приложений пригодность для сопровождения важнее повторного использования. Если код приложения приходится изменять, то хотелось бы, чтобы все изменения были локализованы в одном компоненте, а не разбросаны по многим, поскольку это позволит ограничиться повторным развертыванием только одного изменившегося компонента. Другие компоненты, не зависящие от изменившегося, не нужно ни развертывать, ни заново проверять.

Принцип CCP рекомендует собирать в одном месте классы, которые могут изменяться по одним и тем же причинам. Если два класса настолько тесно связаны, физически или концептуально, что всегда изменяются вместе, то их естественно поместить в один компонент. Это уменьшит трудозатраты на повторный выпуск, проверку и распространение ПО.

Этот принцип неотъемлем от принципа открытости/закрытости (OCP). Ибо именно о «закрытости» в смысле OCP и идет речь в CCP. OCP гласит, что классы должны быть закрыты для модификации, но открыты для расширения. Но, как мы узнали, достичь стопроцентной закрытости невозможно. Закрытость должна быть стратегической целью. Мы проектируем систему так, чтобы она была закрыта относительно типичных изменений, с которыми нам приходилось ранее сталкиваться.

CCP развивает эту идею, рекомендуя включать классы, открытые для изменений одного и того же вида, в один компонент. Тогда в случае появления новых требований возрастают шансы на то, что удастся ограничиться изменением минимального числа компонентов.

Адаптировал: Кротов Артём.

Остались вопросы? Задавай в нашем чате.