Из статьи:
В более общем смысле, проблема йо-йо может также относиться к любой ситуации, когда человек должен постоянно переключаться между различными источниками информации, чтобы понять концепцию.
Исходный код читается гораздо чаще, чем пишется. Таким образом, проблема йо-йо в необходимости переключения между многими файлами является проблемой.
Однако нет , проблема йо-йо кажется гораздо более актуальной при работе с глубоко взаимозависимыми модулями или классами (которые обращаются друг к другу взад-вперед). Это особый вид кошмара для чтения, и, вероятно, это имел в виду тот, кто задумал проблему йо-йо.
Однако - да , важно избегать слишком большого количества уровней абстракции!
Все нетривиальные абстракции, в какой-то степени, негерметичны. - Закон Утечки Абстракций.
Например, я не согласен с предположением, сделанным в ответе mmmaaa, о том, что «вам не нужно идти ([посещать)] класс ZipCode, чтобы понять класс Address». Мой опыт показывает, что вы делаете - по крайней мере, первые несколько раз, когда вы читали код. Однако, как отметили другие, бывают случаи, когда ZipCode
урок подходит.
YAGNI («Я не хочу») - это лучший образец, чтобы следовать за лазанским кодом (кодом со слишком большим количеством слоев) - абстракции, такие как типы и классы, помогают программисту и не должны использоваться, если они не используются. помощь.
Я лично стремлюсь «сохранить строки кода» (и, конечно, связанные «сохранить файлы / модули / классы» и т. Д.). Я уверен, что есть некоторые, кто применил бы ко мне эпитет «примитивно одержимый» - я считаю более важным иметь код, который легко рассуждать, чем беспокоиться о метках, шаблонах и анти-шаблонах. Правильный выбор того, когда создавать функцию, модуль / файл / класс или помещать функцию в обычном месте, очень ситуативный. Я нацеливаюсь примерно на 3-100 строковых функций, 80-500 строковых файлов и "1, 2, n" для многократно используемого библиотечного кода ( SLOC - не включая комментарии или шаблон); обычно я хочу как минимум 1 дополнительный минимум SLOC на строку обязательного шаблонный).
Большинство положительных шаблонов возникли от разработчиков, которые делают именно это, когда они им нужны . Гораздо важнее научиться писать читаемый код, чем пытаться применять шаблоны без решения той же проблемы. Любой хороший разработчик может реализовать фабричный шаблон, не видев его раньше в необычном случае, когда он подходит для их задачи. Я использовал фабричный шаблон, шаблон наблюдателя и, вероятно, сотни, не зная их имени (т. Е. Есть ли «шаблон назначения переменных»?). Для забавного эксперимента - посмотрите, сколько шаблонов GoF встроено в язык JS - я прекратил считать примерно после 12-15 назад в 2009 году. Шаблон Factory так же прост, как, например, возврат объекта из конструктора JS - не нужно WidgetFactory.
Так что - да , иногда ZipCode
это хороший класс. Однако, нет , проблема йо-йо не является строго актуальной.