Дайджест по саморазвитию в программировании №2

Технологии

  • npm для Node.js
  • Maven
  • Ant
  • sbt

Темы для изучения

  • сильное сцепление (high cohesion)
  • слабая связанность (loose coupling)
  • абстрактные прокси
  • создающие фабрики 

Некоторые принципы

По умолчанию все попытки доказательства по аналогии с объектом реального мира надо считать лживыми. Это попытки внушить правдивость одного утверждения путем прикрытия другим, более простым и, возможно, не связанным напрямую с первым. Все аналогии лживы, ибо апеллируют к эмоциям, а не к разуму.

В программировании мы преследуем возможность заменять части нашей системы любыми другими реализациями. Если мы поменяем что-то одно, и это приведет к тому, что что-то другое перестанет работать, то мы видим — это плохой дизайн.
 
Loose coupling не предназначен для того, чтобы быстро заменять модули в системе (хоть и позволяет это). Главное его преимущество — это возможность легко тестировать и, главное, изменять существующий код. Я хочу вносить изменение в метод и быть уверенным что это изменение повлияет только на то место, где я и ожидаю, а не сломает что-то совсем левое в другой части системы. 

Главной задачей разработчика в этой части является создание такого кода, который при необходимости несложно рефакторить и развязать. 

Модуляризовать ради того, чтобы просто получить кучу модулей — раньше времени увеличить сложность продукта. Создать кучу интерфейсов, применить кучу паттернов просто так? Сложность (а соответственно и стоимость разработки) должна возрастать с ростом полезности.

Я за слабую связанность, но сделайте одолжение: убедитесь, что ваше решение связано с вашей проблемой.

Дробление ответственного несущего элемента на мелкие части повышает вероятность отказа или поломки.