代码重构
- - ITeye博客随着程序的演化,我们有必要重新思考早先的决策,并重写部分代码. 代码需要演化;它不是静态的事物. 重写、重做和重新架构代码合起来,称为重构. 当你遇到绊脚石 --- 代码不在合适,你注意到有两样东西其实应该合并或是其他任何对你来说是"错误"的东西 -------- . 如果代码具备以下特征,你都应该考虑重构代码:.
每次提交只做一件事.通常情况下,这意味着你应该在开发时应该把不同的改动分解成不同的提交.例如,如果你正在开发一个功能点同时遇到一个先前存在的Bug,应该暂存你的改动;签出一个干净的HEAD,用一个改动修复Bug;然后再把新功能代码衍合到修改Bug代码之上,这样就有了二个改动,每个都有一个原因("添加X新功能","修复Y Bug"), 而不是用一个改动带二个原因("添加X新功能和修复Y Bug").
即使像整顿风格问题也最好要分解:因为它们要实现的是不同的目标.因为评审一个300行的"把tabs转成空格"加上一个30行的"实现Z功能点"要远比一个330行的"实现Z功能点和把tabs转成空格容易评审的多.
内容远比结构重要.特别地,概述应该解释你为何做此修改并且为何选用那样的实现方式.改动本身通常能很好的解释改动的内容.例如,这明显是一个糟糕的提交记录信息:
fix a bug但是这个也好不了哪去:
Allow dots in usernames Change the regexps so usernames can have dots in them.
这个比没有强点,但是仅说些能从diff中得到的信息.相反,你应该提供修改的上下文并且解释为什么如此修改,以及为什么这是正确的做法:
Allow dots in usernames to support Google and LDAP auth To prevent nonsense, usernames are currently restricted to A-Z0-9. Now that we have Google and LDAP auth, a couple of installs want to allow "." too since they have schemes like "[email protected]" (see Tnnn). There are no technical reasons not to do this, so I opened up the regexps a bit. We could mostly open this up more but I figured I'd wait until someone asks before allowing "ke$ha", etc., because I personally find such names distasteful and offensive.这个信息不能从改动本身获取.并且对评审者以及事后试图理解改动的人来说也更有用. 一个简单的解释为什么的方法是参考促使你做改动的东西(如Bug,问题,版本等).
Phabricator关于此没有指南.如果喜欢也诚然可以为你的组织设立指南,但是将 "为什么"放进提交记录是最重要的一部分.