Связность компонентов

Сегодня мы рассмотрим три принципа дизайна;

  • REP: принцип эквивалентности повторного использования/выпуска
  • CCP: общий принцип закрытия
  • CRP: общий принцип повторного использования

Эти три принципа связаны со связностью компонентов. Я также объясню здесь компонент и связность, чтобы понять значение сплоченности компонентов.

Мы можем думать, что компоненты — это наименьшие единицы, которые можно развертывать вместе. Связность – это то, насколько эти компоненты связаны друг с другом.

Вкратце, эти три принципа проектирования касаются решения о том, какие классы объединяются в компоненте.

Принцип эквивалентности повторного использования/выпуска

В соответствии с этим принципом мы стремимся выпускать/повторно использовать программные компоненты, принадлежащие к одному и тому же выпуску.

Во-первых, нам нужны номера выпусков для каждого компонента, чтобы выполнить REP. Иначе мы не сможем понять, совместимы ли компоненты друг с другом.

Во-вторых, компоненты должны состоять из классов и модулей, которые можно выпускать вместе.

Наконец, каждый выпуск имеет собственную документацию для информирования пользователей об этом компоненте.

Общий принцип закрытия

Согласно этому принципу, когда мы решаем, какие классы скомпоновать, мы хотим, чтобы классы имели одинаковую причину для изменения в одном и том же компоненте. Это перефразирует SRP (принцип единой ответственности) на уровне компонентов.

Должна быть только одна причина для изменения одного компонента, который помогает нам сократить нашу работу. В этом принципе КПК нам нужно будет изменить только один компонент, развернуть этот компонент и протестировать его. В противном случае нам нужно вносить изменения в разные компоненты и следить за всем жизненным циклом каждого измененного компонента. Следовательно, если мы будем использовать принцип ККТ, это снизит нагрузку.

Подводя итог, можно сказать, что между принципами CCP и SRP есть сходство. Если мы будем следовать CCP в нашем компоненте, у этого компонента будет только одна причина для изменения. Наконец, мы можем понять цель SRP и CCP в этом предложении.

Соберите вместе то, что меняется по одной и той же причине, и разделите то, что меняется по разным причинам.

— Роберт С. Мартин

Общий принцип повторного использования

Каждый компонент имеет много классов внутри, и Общий принцип повторного использования (CRP) гласит, что если некоторые классы часто используют друг друга, вы должны поместить эти классы в один и тот же компонент.

Предположим, что у нас есть классы, как показано в примере ниже.

Component A               Component B
- Class A                 - Class C
- Class B                 - Class D
Other classes..           - Class E
                          Other classes ..

Класс A часто использует методы класса B, что означает, что они тесно связаны и должны находиться в одном компоненте. Это отражает правильную структуру CCP.

Однако, если класс A использует класс C и не используется для остальной части компонента B, у нас есть проблема. Поскольку мы зависим от классов, которые мы не используем в компоненте B, таких как класс D и класс E. Это противоположно тому, чего мы хотим достичь в этом принципе. Целью CRP является создание компонента, который имеет классы, зависящие от его собственных классов, вместо неиспользуемых и ненужных классов из другого компонента.

Не заставляйте пользователей компонента зависеть от того, что им не нужно.

— Роберт С. Мартин

Ссылки

  1. Чистая архитектура Роберта С. Мартина