теория
Держись, тут одна из самых красивых идей курса — и она проще, чем звучит.
Сложность живёт этажами. Любой компонент сам — система: сервис состоит из модулей, модуль из классов, класс из методов. Отсюда два уровня: глобальная сложность — это сложность взаимодействий между компонентами, локальная — сложность внутри одного компонента. Где проходит граница, зависит от того, откуда смотришь: поднимись на этаж выше — и вчерашняя глобальная сложность окажется чьей-то локальной.
И вот ловушка: чинить только один этаж — самообман.
Управлять надо обоими этажами разом. А запас непредсказуемости удобно мерить понятием из механики — : это число независимых переменных, которыми описывается состояние системы. У квадрата такая переменная одна (сторона), у прямоугольника — две. Чем больше степеней свободы, тем больше возможных состояний и тем больше комбинаций надо держать в голове, когда что-то меняешь.
Лишние степени свободы — топливо сложных взаимодействий. Продублировал бизнес-правило в двух сервисах — у правила теперь два независимых значения, и «реализации разъехались» становится законным состоянием. Реплицировал данные — добавил состояние «копия устарела».
Срезают степени свободы ограничения (constraints). Класс Triangle с тремя открытыми полями умеет изобразить невозможный треугольник; спрячь поля за методом SetEdges с проверкой — и невалидные состояния просто исчезнут из списка возможных.
И вот тут всё сходится с первой неделей: — это и есть инструмент задания ограничений. Интерфейс между компонентами решает, какое знание пересекает границу. А каждая утёкшая крупица знания дарит чужому коду ещё одну степень свободы относительно твоих внутренностей. Reports, знавший схему Orders, был волен обратиться к любой колонке — и обратился.
Только не переусердствуй: не всякое ограничение — благо. Ком грязи ограничен по максимуму — там любая правка гарантированно что-то ломает. Предсказуемость есть, а пользы нет. Хорошие ограничения разрешают нужные взаимодействия и закрывают сложные.
Каждая пунктирная линия — чьё-то знание о чужих внутренностях, то есть лишняя степень свободы системы.