We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
基于《重构2》一书中的思想 前部分为概念叙述,可直接跳过看例子
基于《重构2》一书中的思想
前部分为概念叙述,可直接跳过看例子
用户侧关注的行为不应改变
总之,重构可以帮助我们更好的掌握代码,而不是一味的完成某些事情(功能)
三次法则:第一次做某件事的时候只管去做;第二次做类似的事情就会反感,但也能接受;第三次再做类似的事情时,你就应该重构 事不过三,三则重构 ——《重构2》
三次法则:第一次做某件事的时候只管去做;第二次做类似的事情就会反感,但也能接受;第三次再做类似的事情时,你就应该重构
事不过三,三则重构
——《重构2》
code review
通常合适的命名要比写代码更难 [滑稽]
这个不用很常见,不过多赘述
据我们的经验,活的最长、最好的程序,其中的函数都比较短 ——《重构2》
据我们的经验,活的最长、最好的程序,其中的函数都比较短
将一个函数内部拆分成多个功能模块(函数),简洁兼并语义化
function printOwing(invoice) { let outstanding = 0; printBanner(); // calculate outstanding for (const o of invoice.orders) { outstanding += o.amount; } // record due date const today = Clock.today; invoice.dueDate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 30 ); //print details console.log(`name: ${invoice.customer}`); console.log(`amount: ${outstanding}`); console.log(`due : ${invoice.dueDate.toLocaleDatestring()}`); }
invoice
outstanding
function printOwing(invoice) { printBanner() let outstanding=calculateOutstanding(invoice) recordDueDate(invoice) pringDetails(invoice,outstanding) } // ...小函数省略
也可将calculateOutstanding(invoice)作为参数,即:
calculateOutstanding(invoice)
pringDetails(invoice,calculateOutstanding(invoice))
calculateOutstanding
recordDueDate
与提炼函数恰恰相反,将一个提炼出的函数再拆开放回原函数
function getRating(driver){ return moreThanFiveLateDeliveries(driver)? 2 : 1 } function moreThanFiveLateDeliveries(driver){ return driver.numberOfLateDeliveries > 5 }
moreThanFiveLateDeliveries
getRating
从目前例子来看,思想可以总结为:为了更好的语义化,为了更好的间接性,为了更好的一目了然,
这章主要大概讲解重构的思想,当然重构还有更多种的方法,包括封装。
未完待续
《重构2》[美]马丁.福勒(Martin Fowler)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
重构
何为重构
用户侧关注的行为不应改变
为何重构
总之,重构可以帮助我们更好的掌握代码,而不是一味的完成某些事情(功能)
何时重构
code review
时的重构具体的重构点
命名
重复代码
这个不用很常见,不过多赘述
过长的函数
过长的参数列表
全局变量
可变数据
例子——提炼函数(Extract Function)
invoice
)是一个数据结构,然而代码中又有修改这个数据结构的部分,所以可以将其提炼出来为一个函数outstanding
),将初始化变量和使用变量的地方两者靠近。如果这个局部变量不止在一处使用,则将使用变量的逻辑提炼为一个函数,并且返回出变量也可将
calculateOutstanding(invoice)
作为参数,即:calculateOutstanding
内用到的invoice
参数不会因为代码位置的变化而变化recordDueDate
)例子——内联函数(Inline Function)
moreThanFiveLateDeliveries
内部的代码放回getRating
中同样清晰已读,那么应该去掉这个函数。moreThanFiveLateDeliveries
内部代码是递归调用、多返回点、内联之后出现局部变量无法访问等复杂情况,内联函数这种重构手法并不适合。总结
从目前例子来看,思想可以总结为:为了更好的语义化,为了更好的间接性,为了更好的一目了然,
这章主要大概讲解重构的思想,当然重构还有更多种的方法,包括封装。
未完待续
参考资料
《重构2》[美]马丁.福勒(Martin Fowler)
The text was updated successfully, but these errors were encountered: