所以我目前正在阅读Clean Code,我非常喜欢超小功能的概念,每个功能都讲述自己的“故事”。我也非常喜欢他如何编写代码以便用“TO段落”来阅读的方式,我决定将其重命名为“为了”
无论如何,我一直在重构很多代码以包含更多有意义的名称,并使得它会被更好地阅读,我偶然发现了一些我不确定的东西,也许这里的一些大师可以给我一些坚实的建议!
我知道代码风格是一个极具争议性和主观性的主题,但希望我不会被这篇文章扩展出来。
谢谢大家!
PSA:我是一名新手,刚从大学毕业,在实习期间使用MEAN堆栈创建一个内部项目的Web应用程序。
清洁代码重构
//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);
}
}
答案 0 :(得分:0)
MEANjs有时会使用第二种方法(例如使用回调)。我个人认为,如果你不打算在主要功能之外使用那些助手,那就太好了。
答案 1 :(得分:0)
在此发布IIFE示例,以便我有更多的工作空间。我并不是说这是最好的选择,而是我会使用OP给我们的信息。
var castTaskDataTypesForForm = (function() {
var castPriorityToInt = function castPriorityToInt() { ... },
castReminderInHoursToInt = function castReminderInHoursToInt() { .. },
castDueDateToDate = function castDueDateToDate() { ... },
getAssigneObjFromAssigneeString = function getAssigneObjFromAssigneeString() { ... };
return function castTaskDataTypesForForm() {
castPriorityToInt();
castReminderInHoursToInt();
castDueDateToDate();
getAssigneObjFromAssigneeString();
};
}());
vm.task = vm.data.task;
castTaskDataTypesForForm();
这样,辅助函数只定义一次,并在闭包内保持私有。如果您更喜欢函数x()样式,则可以删除var x = function x语法。
编辑:如果只调用一次函数,那么你自己的例子可能是更干净的代码。您使用IIFE语法的原因是保持辅助函数只能由main函数访问,就像您自己的第二个示例一样。