Так что я сейчас читаю Clean Code, и мне очень нравится идея супер маленьких функций, каждая из которых рассказывает свою собственную «историю». Мне также очень нравится, как он пишет, как писать код, чтобы читать его в терминах «ТО абзацев», которые я решил переименовать в «0» дляВложенные вспомогательные функции внутри функции для удобства чтения
В любом случае, я был рефакторинг много кода, чтобы включить более значимые имена и сделать поток, в котором он будет читаться немного лучше, и я наткнулся на то, о чем я не уверен, и, возможно, некоторые гуру здесь могут дать мне солидный совет!
Я знаю, что код-стили является весьма спорной и субъективной темой, но, надеюсь, я не буду получать развернутый из этого поста.
Спасибо всем!
PSA: Я ноб, свежий из колледжа, создающего веб-приложение, использующее стек MEAN для внутреннего проекта в рамках стажировки на данный момент.
Чистый код рефакторинг
//Modal Controller stuff above. vm.task is an instance variable
vm.task = vm.data.task;
castTaskDataTypesForForm();
function castTaskDataTypesForForm() {
castPriorityToInt();
castReminderInHoursToInt();
castDueDateToDate();
getAssigneObjFromAssigneeString();
}
function castPriorityToInt() {
vm.task.priority = vm.task.priority === undefined ?
0 : parseInt(vm.task.priority);
}
function castReminderInHoursToInt() {
vm.task.reminderInHours = vm.task.reminderInHours === undefined ?
0 : parseInt(vm.task.reminderInHours);
}
function castDueDateToDate() {
vm.task.dueDate = new Date(vm.task.dueDate);
}
function getAssigneObjFromAssigneeString() {
vm.task.assignee = getUserFromId(vm.task.assignee);
}
Возможно лучше рефакторинг?/Мой вопрос ----------------------------
//Modal Controller stuff above. vm.task is an instance variable
vm.task = vm.data.task;
castTaskDataTypesForForm();
function castTaskDataTypesForForm() {
castPriorityToInt();
castReminderInHoursToInt();
castDueDateToDate();
getAssigneObjFromAssigneeString();
function castPriorityToInt() {
vm.task.priority = vm.task.priority === undefined ?
0 : parseInt(vm.task.priority);
}
function castReminderInHoursToInt() {
vm.task.reminderInHours = vm.task.reminderInHours === undefined ?
0 : parseInt(vm.task.reminderInHours);
}
function castDueDateToDate() {
vm.task.dueDate = new Date(vm.task.dueDate);
}
function getAssigneObjFromAssigneeString() {
vm.task.assignee = getUserFromId(vm.task.assignee);
}
}
Возможно, лучше не определять помощников внутри функции, так как они будут воссозданы каждый раз, когда вызывается основная функция. В зависимости от вашей архитектуры скройте их в том же объеме, что и в первом примере. Или используйте IIFE, чтобы создать закрытие вокруг них, чтобы помощники оставались частными. Или поставьте их на прототипе модуля, содержащего основную функцию (если она существует). Не зная структуры остальной части вашего кода, я бы пошел на IIFE. – Shilly
Удивительно, спасибо за то, что вы дали мне возможность заглянуть! Никогда не слышал о IIFE, глядя в них сейчас, чтобы посмотреть, какие у него есть. Также из-за того, как это используется и его архитектура, это можно и только вызывает один раз. Поэтому, если их воссоздать, это не проблема. – Michael
@Shilly, если хотите, отправьте ответ и я его приму. – Michael