Пришёл я тут на проект с оверинженирингом и перебором коплинга. Решил ещё раз вам напомнить про low coupling high cohesion. Думали бы все об этом чаще, я бы сейчас не онбордился 3 месяца в систему со средним уровнем абстракции кода 20



low coupling high cohesion – суть в противоречивости

Быстро, качественно и не дорого. Вот несбыточная мечта рода человеческого.



Но в самой сути этой тройки лежит противоречие, основанное на ограниченности различных ресурсов.



Мы все чётко осознаём это противоречие и миримся с ним. Пишем костыли. Выделяем время на рефакторинг. Нанимаем сеньоров, вместо джунов



Быстро, качественно и не дорого: выбери 2)

Вот вся суть этого мира.





А теперь давайте проанализируем принципы программирования с этой точки зрения.



DRY – догма. Во многих случаях вредит

KISS – догма. Во многих случаях вредит

YAGNI – догма. Во многих случаях вредит

SOLID – состоит из догм настолько, что многие не верят, что можно вообще написать что-то, следуя всем принципам



Эти штуки нельзя рассматривать, как универсальные правила. Так как слепое следование приводит к перекосам и дисфункциям. Я рассматриваю эти принципы, как инструменты с ограниченной зоной влияния.



Но среди всех принципов разработки есть парочка, которую я смело могу назвать универсальными принципами качественного кода (что это такое, можно будет как-нибудь отдельно обсудить)



low coupling и high cohesion



И люблю я их именно из-за того, что они противоречат друг другу.



Очень легко доказать это, если возвести оба принципа в абсолют



Абсолютный low coupling – это god object) Если нет связей между модулями, то и коплинга нет.



Абсолютный high cohesion – когда всё приложение состоит из однострочных функций, которые выполняют супер атомарные операции. И организуют неразборчивую паутину связей



Обе ситуации ужасны. И при этом невозможны, если учитывать оба принципа одновременно.



God object невозможен, если мы думаем о high cohesion

Перебор с декомпозицией невозможен, если мы думаем о low coupling



Каждый из этих принципов не может быть реализован полностью из-за существования другого. И благодаря этому наш код стремится к среднему значению, в котором, по моему мнению, и находится зона "хорошего кода"