Комментарии 15
Проектирование наперед всей задачи сверху-вниз и отсутствие обработки ошибок в коде это пожалуй самый романтичный период в жизни студентов старших курсов, когда кажется, что все можешь, понимаешь и готов этому учить других.
А потом приходят первые багрепорты откуда-то с другого конца земного шара, которые требуют чьей-то реакции в три часа ночи, или продакт в очередной раз меняет требования, и самые смышлёные из этих ребят быстро осознают, что ставили не на те ценности и не понимают ровным счётом ни чего.
Изменчивость требований, нестабильность среды, комплексность и неоднородность решений, отсутствие уверенности в чем-либо, распределенность команд и приложений, необходимость быстрой реакции и высоких гарантий надежности — вот реалии современной разработки. Но это все сложно показать на простых примерах.
Проектирование наперед всей задачи сверху-вниз
В большинстве случаев программист каждый раз имеет дело ровно с одной задачей. Ее, по идее, и надо спроектировать целиком. Другой вопрос, что окончательные требования как правила становятся понятными уже к середине процесса.
В любом случае, на мой взгляд, «Даже плохой план (алгоритм разработки) лучше его отсутствия»
Интересно на какой курс вы ссылаетесь изначально ( ссылка удалена почему-то)
Давайте только не применять эти правила если код функции меньше хотя бы 20 строк и от результата ее ничего не зависит )
Ну вот серьезно, что бы вы подумали о вашем сотруднике который реально вместо того чтобы просто вывести разницу во времени, написал 4 функции для этого и тесты на каждую из них? и потратил на это видимо больше времени.
Я считаю что это трата оплачиваемого времени на ерунду, вместо решения задач бизнеса, сотрудник с таким подходом будет выполнять крайне мало задач в месяц. Поддержка его тестов дороже переписывания тестируемых функций.
В примере автора на фронтенде, вообще не страшно если функция ничего не выведет, это не критичный функционал. Не стоит он потраченных усилий.
ну и просто пример нормального рабочего решения без заморочек.
const getWorkDuration = (worktimeFrom, worktimeTo) => {
let diff = new Date('1/1/1 '+worktimeTo).getTime() - new Date('1/1/1 '+worktimeFrom).getTime()
if (diff < 0) diff += 24*60*60*1000
const [hh,mm] = new Date(diff).toISOString().substr(11,5).split(':')
return `${Number(hh)}ч` + (Number(mm) ? ` ${Number(mm)}мин` : '')
}
Такое не нуждается в тестах — потому что тут просто форматирование входящих данных то есть нет никакой логики, никакое состояние не меняется.
HowToCode — Адаптация системного подхода к разработке для React и TypeScript