Справочник
Словарь курса
Это канонический язык курса, а не учебник по всем оттенкам терминов. Используйте его, чтобы одинаково понимать задания, ревью, разговоры с AI-агентом и решения о границах модулей.
Основные термины
- Модуль (module)
- Часть системы с интерфейсом и реализацией.
- Интерфейс (interface)
- Все, что пользователь модуля должен знать, чтобы использовать его правильно.
- Сигнатура (signature)
- Видимая форма вызова: имя, параметры и тип результата. Это только часть интерфейса.
- Контракт (contract)
- Обещание модуля: что можно передать, что вернется, какие ошибки возможны и какие правила надо соблюдать.
- Неформальный интерфейс (informal interface)
- Правила использования, которые не видны в сигнатуре: порядок вызовов, ограничения, побочные эффекты и ожидания по скорости.
- Инвариант (invariant)
- Условие, которое должно оставаться истинным после операций модуля.
- Публичное поведение (public behavior)
- Наблюдаемый результат работы модуля через его интерфейс, без знания внутренних шагов реализации.
- Реализация (implementation)
- Внутренний способ выполнить обещание интерфейса.
- Глубокий модуль (deep module)
- Много поведения за маленьким понятным интерфейсом.
- Мелкий модуль (shallow module)
- Интерфейс почти такой же сложный, как внутреннее поведение.
- Глубина (depth)
- Сколько полезного поведения пользователь получает за единицу знания об интерфейсе.
- Рычаг (leverage)
- Польза от модуля для вызывающего кода: один простой интерфейс дает много готового поведения.
- Локальность (locality)
- Свойство дизайна, при котором знание, баги и изменения концентрируются в одном месте, а не расползаются по системе.
- Транзитный модуль (pass-through module)
- Прослойка, которая почти ничего не скрывает и в основном передает вызов дальше.
- Classitis
- Болезненное размножение классов или модулей без соответствующего уменьшения сложности.
- Шов изменения (seam)
- Место, где поведение может меняться без редактирования вызывающего кода.
- Адаптер (adapter)
- Конкретная реализация, удовлетворяющая интерфейсу на шве изменения.
- Information hiding
- Модуль скрывает важное проектное решение от остальной системы.
- Deletion test
- Если модуль удалить, сложность исчезнет или расползется по вызывающему коду?
- Тактическое программирование (tactical programming)
- Работа ради быстрого локального результата без достаточного внимания к будущей стоимости изменений.
- Стратегическое программирование (strategic programming)
- Работа с небольшими осознанными вложениями в дизайн, чтобы будущие изменения оставались управляемыми.
- Критерий дизайна (design criterion)
- Проверяемое условие, по которому можно принять архитектурное решение, а не оценивать его на вкус.
- Задача агенту (agent task)
- Формулировка работы для AI-агента: цель, контекст, границы, ограничения, ожидаемый артефакт и критерии приёмки.
- Контекст (context)
- Информация, которую агент должен знать, чтобы не угадывать: цель, текущая структура, важные файлы, ограничения и словарь.
- Дизайн-план (design plan)
- Короткое объяснение будущего изменения до кода: какие модули затрагиваются, какой интерфейс сохраняется или появляется, как будет проверяться поведение.
- Критерии приёмки (acceptance criteria)
- Проверяемые условия, по которым понятно, что работа агента действительно выполнена.
Как пользоваться
Когда агент предлагает "разнести код", "сделать сервис" или "добавить абстракцию", проверьте это словарем: где интерфейс, что скрыто внутри реализации, какой seam появляется и не стал ли новый модуль shallow.