Почему документация — ваш лучший друг

(и как не оказаться гуру, чьи советы перестают работать после обновления)

“Apps may only use public APIs and must run on the currently shipping OS.” Apple App Review Guidelines

Если вы когда-либо начинали работу с новым фреймворком и ловили себя на мысли: “Сейчас всё сам пойму, документация — это для зануд” — вы точно не одиноки. У многих разработчиков срабатывает естественный инстинкт: сначала попробовать, и только потом — читать. Это нормально.

Но именно на этом этапе можно легко свернуть с правильного пути и оказаться в ситуации, где код работает… но только сегодня, и только “у меня”.

Почему просто “разобраться самому” — недостаточно?

Фреймворки, особенно закрытые и проприетарные, сложны и многослойны. В них много скрытой логики, оптимизаций и особенностей реализации, которые:

* не задокументированы;
* не гарантированы;
* могут измениться в любой момент;
* являются коммерческой тайной и могут быть защищены патентами
* содержат баги, недоработки, которые известны только разработчикам фреймворка.

Когда вы действуете “по наитию”, можно легко построить архитектуру на случайных наблюдениях, вместо опоры на чётко описанные правила. Это приводит к тому, что код становится уязвимым к обновлениям и edge-кейсам.

Документация — это не ограничение, а опора

Разработчики фреймворков создают мануалы не просто так — это договор между вами и ними. Пока вы действуете в рамках документации, они обещают:

* стабильность;
* поддержку;
* предсказуемое поведение.

Если вы выходите за эти рамки — всё, что произойдёт дальше, становится исключительно вашей ответственностью.

Эксперименты? Конечно. Но в рамках правил.
Любопытство — суперсила разработчика. Исследовать, пробовать нестандартное, тестировать границы — всё это необходимо. Но здесь есть важное “но”:

Экспериментировать нужно в рамках документации и best practices.

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

Осторожно: Гуру

Иногда вы можете столкнуться с настоящими “экспертами”:

* они проводят курсы,
* выступают на конференциях,
* пишут книги и блоги,
* делятся “своим подходом” к фреймворку.

Но даже если они звучат убедительно, важно помнить:
если их подходы противоречат документации — они неустойчивы.

Такие “эмпирические паттерны” могут:

* работать только на конкретной версии фреймворка;
* быть уязвимыми к обновлениям;
* ломаться в непредсказуемых ситуациях.

Гуру — это круто, когда они уважают мануалы. В противном случае — их советы нужно фильтровать через официальную документацию.

Немного SOLID

Три идеи из принципов SOLID особенно актуальны здесь:

* Open/Closed Principle: расширяй поведение через публичные API, не лезь во внутренности.
* Liskov Substitution Principle: не полагайся на реализацию, полагайся на контракт. Нарушишь — всё сломается при замене реализации.
* Dependency Inversion: Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба типа должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Что это значит на практике? Если вы используете фреймворк и напрямую завязываетесь на его внутренние детали — вы нарушаете этот принцип.
Вместо этого нужно строить зависимость от публичных интерфейсов, протоколов и контрактов, которые фреймворк официально поддерживает. Это даёт:

* лучшую изоляцию вашего кода от изменений во фреймворке;
* возможность легко тестировать и подменять зависимости;
* предсказуемое поведение и стабильность архитектуры.

Когда ваш код зависит от деталей, а не от абстракций — вы буквально встраиваете себя в конкретную реализацию, которая может исчезнуть или измениться в любой момент.

А если баг?

Иногда бывает, что вы всё сделали правильно, но работает некорректно. Это бывает — фреймворки не идеальны. В таком случае:

* Соберите минимальный воспроизводимый пример.
* Убедитесь, что вы используете только задокументированные API.
* Отправьте баг-репорт — вас точно поймут и, скорее всего, помогут.

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

Как выжать максимум из фреймворка

* Читайте документацию. Серьёзно.
* Следуйте гайдам и рекомендациям от авторов.
* Экспериментируйте — но в пределах описанного.
* Проверяйте советы (даже самых известных спикеров!) через мануал.
* Отлаживайте баги с минимальными кейсами и уважением к контракту.

Заключение

Фреймворки — это не чёрные ящики, а инструменты, у которых есть правила использования. Игнорировать их — значит писать код “на авось”. А мы ведь хотим, чтобы наш код жил долго, радовал пользователей, и не ломался от минорного апдейта.

Так что: доверяйте, но проверяйте. И да, читайте мануалы. Они — ваша суперспособность.

Источники

https://developer.apple.com/app-store/review/guidelines/
https://en.wikipedia.org/wiki/SOLID
https://en.wikipedia.org/wiki/API
https://en.wikipedia.org/wiki/RTFM