Зі статті:
Загалом, проблема йо-йо може також стосуватися будь-якої ситуації, коли людина повинна постійно переходити між різними джерелами інформації, щоб зрозуміти поняття.
Вихідний код читається набагато частіше, ніж написано. Таким чином, проблема йо-йо про необхідність перемикання між багатьма файлами викликає занепокоєння.
Однак ні , проблема йо-йо вважається набагато актуальнішою при роботі з глибоко взаємозалежними модулями або класами (які дзвонять між собою назад і назад). Це - особливий вид кошмару для читання, і це, мабуть, те, що мав на увазі формуляр проблеми йо-йо.
Однак - так , важливо уникати занадто багато шарів абстракції!
Всі нетривіальні абстракції, певною мірою, є герметичними. - Закон про проникнення абстракцій.
Наприклад, я не погоджуюся з припущенням, зробленим у відповіді mmmaaa, що "вам не потрібно йо-йо, щоб [(відвідати)] клас ZipCode, щоб зрозуміти клас адреси". Мій досвід полягав у тому, що ви це робите - принаймні перші кілька разів читаєте код. Однак, як зазначали інші, бувають випадки, коли ZipCodeклас підходить.
YAGNI (Я не буду потрібен) кращий малюнок , щоб слідувати , щоб уникнути Лазанья коду ( тобто занадто великою кількістю шарів) - абстракції, такі як типи і класи там , щоб допомогти програмісту, і не повинні використовуватися , якщо вони не є допомогу.
Я особисто прагну "зберегти рядки коду" (і, звичайно, пов'язані "збереження файлів / модулів / класів" тощо). Я впевнений, що є такі, хто застосував би до мене епітет "примітивних одержимих" - мені здається, важливіше мати код, про який легко міркувати, ніж турбуватися про мітки, шаблони та анти-шаблони. Правильний вибір, коли створити функцію, модуль / файл / клас або поставити функцію у загальне місце розташування, дуже ситуативний. Я орієнтуюсь приблизно на 3-100 функцій рядків, 80-500 рядкових файлів та "1, 2, n" для багаторазового використання бібліотечного коду ( SLOC - не включаючи коментарів чи котлован; я, як правило, хочу хоча б 1 додатковий мінімум SLOC на рядок обов'язкового котельня).
Більшість позитивних зразків виникають у розробників, які роблять саме це, коли їм це потрібно . Набагато важливіше навчитися писати читабельний код, ніж намагатися застосовувати шаблони без тієї самої проблеми для вирішення. Будь-який хороший розробник може реалізувати заводський зразок, не бачивши його раніше, в тому незвичайному випадку, коли це правильно підходить для їхньої проблеми. Я використовував заводський зразок, модель спостерігача і, мабуть, сотні, крім того, не знаючи їх назви (тобто чи існує "змінна схема присвоєння"?). Для цікавого експерименту - подивіться, скільки моделей GoF вбудовано в мову JS - я припинив рахувати приблизно через 12-15 років у 2009 році. Фабрична схема така ж проста, як повернення об'єкта з конструктора JS, наприклад - не потрібно a WidgetFactory.
Отже - так , іноді ZipCode це хороший клас. Однак ні , проблема йо-йо не є суто актуальною.