您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Be-Professional---项目规范之道(二)
BeProfessional-项目规范之道(二)编写整洁代码Writingcleancoderequiresthedisciplineduseofamyriadlittletechniquesappliedthroughapainstakinglyacquiredsenseofcleanliness.Thiscode-senseisthekey.Someofusarebornwithit.Someofushavetofighttoacquireit.Notonlydoesitletusseewhethercodeisgoodorbad,butitalsoshowsusthestrategyforapplyingourdisciplinetotransformbadcodeintocleancode.1.基本要求CodingStyle,如果有要求,应该严格遵循,任何例外的情况需要讨论决定。可读性,要容易理解,命名要具有足够描述性,不能有歧义,代码路径、结构要清晰、简洁。一致性,包括但不限于标识符命名、错误处理、日志格式、文件组织方式、HTTPAPI接口设计、UI交互等各个方面,越是一致的系统越容易上手,越容易维护,反之则维护成本越高。健壮性,进行必要的输入验证,充分得考虑边界情况,异常处理要周全,防止内存泄露,防止竞态条件,多线程安全,等等。性能,考虑数据量大或者访问频繁时的情况,对内存、数据库的使用要高效,算法要尽量最优。1.任何涉及数量的地方,在业务场景合理的前提下考虑把数量放大到最大,为最坏的情况做打算。2.数据库:操作应尽量批量进行,只查询必需的字段,减少IO消耗。特别大的查询应在数据库中分页,由程序控制分批次处理,全量取出在内存中计算或者根本不考虑数据量大小是常见的低级错误。合理使用索引,例如尽量使用前缀索引减少索引的数量安全性,进行必要的权限检查,不能过度信任客户端输入。DRY(Don'tRepeatYourself)原则,复制、粘贴的行为是要坚决禁止的,不知道如何复用代码的要主动与其他成员讨论。单一职责原则,一个类、文件或者模块不能做的太多,不能做不该它做的事,好的设计是只把一件事做好。开放、封闭原则,要方便扩展,要考虑到以后的需求。代码改动方式要合适,不能一味得堆砌代码,需要适时停下来进行重构。保持干净,不能存在任何无用的文件、代码,所有文档、注释需要同步更新,不能包含注释掉的代码,不能包含临时调试代码,例外情况应该添加注释说明。所有Warning都应该被立即修复,觉得不需要修的,讨论决定后通过修改配置文件禁用掉。2.进阶要求使用多态减少或转移`if`判断,=4F72VULWFvc&index=1&list=PL693EFD059797C21E3.提高代码可读性的技巧局部变量尽量就近声明。returnearly,BestPracticesforModernPHPDevelopment-,HowandWhytoAvoidExcessiveNesting在语言本身语法允许的情况下,将主流程放在文件上部,子流程按被调用顺序放在文件下部,这样打开文件后可以比较快的抓住重点,比如:main=-doStuff1()doStuff2()doStuff3()doStuff1=-console.log'1'doStuff2=-console.log'2'doStuff3=-console.log'3'相关的代码尽量按使用顺序组织在一起,尤其是添加新代码时,不要一味得添加到文件尾部。布尔变量命名应尽量采用肯定形势。避免硬编码数字、字符串,应使用常量并给它们有意义的名字。传递简单数据类型时,适当添加临时变量提高可读性,例如:ignoreError=truedoStuff(ignoreError)4.如何写注释代码的意图应该由代码自身来表达,即所谓的可读性,不应该依赖于注释说明,所以优先考虑写更可读的代码。代码意图明显的情况下,不要加注释重复说明。以下注释是合理的或者说以下情况需要写注释:o纲要性的注释,简要的描述某一个文件、某一个类或某一个流程。o确实无法从代码本身提高可读性的情况,比如复杂业务逻辑、算法。o代码的作用并不直观时,解释这样做的原因。o存在多种可选方案时,解释为什么选择现在这种。o因为某些限制而使代码不一致、不优雅或存在副作用时,应注明原因及后果。o参考了外部一些资料时,应注明链接,方便其他人查看。o临时标记注释:TODO、FIXME、HACK、OPTIMIZE、REVIEW注释应随代码更新。5.调试技巧查看日志,比如做PHPWeb开发要知道Nginx,PHP-FPM,PHP的日志文件的位置,必要的时候从中寻找线索。使用`tail-Ffile1file2`命令可以持续监控多个文件。通过添加临时log语句或断点的形式检查代码路径,很多时候调试是个体力活,并没有什么难度,不要轻易放弃或寻求他人帮助。检查代码是否按预期路径执行了,如果没有,为什么?输入数据的原因吗?或者中间一步数据处理是错的?从数据进入系统开始一步步从前往后分析,用排除法逐步缩小范围,bug必将无所遁形。另外,有时候代码路径可能牵扯到第三方库,这个时候不要畏惧,代码都是人写的,尤其开源项目通常质量较高,进去看一下,通常没你想象的那么难。确保读懂日志消息、异常信息、错误输出等,特别是英文内容,不要因为是英文不想读,结果非常明显的线索摆在你面前你却视而不见。比如常见的git错误,都会有相应的描述甚至建议的解决办法。再比如做Web开发,一个页面打不开,最起码你要先看一下HTTPResponse是什么,状态码,body等。如果实在看不懂,google之。有意识的组织整理常见错误,依据过往经验快速定位问题。例如PHP开发时碰到HTTP404,基本可以排除代码逻辑问题,应该检查拼写错误、Nginx配置、MVC框架路由配置、文件路径等。使用第三方组件时,遇到问题要知道去查看它的issue列表,也许别人也遇到了同样的问题并且已经报了Bug,尤其是GitHub上的开源项目。CodeReview1.目的提高代码质量,查漏补缺。相互学习。促进项目内知识流动,防止对某个个人过分依赖。2.CommitMessage规范规定格式如下:$(scope):$(subject)$(description)`$(scope)`:必需,取决于具体项目,一般为一组固定值,用来描述本次commit影响的范围,比如Commits·nodejs/node·GitHub,后加入项目的新成员应遵循已有的scope约定。`$(subject)`:必需,50个字符左右的简要说明,首字母小写,通常是动宾结构,描述做了什么事情,动词用一般现在时,禁止出现*updatecode*,*fixbug*等无实际意义的描述,好的例子:*selectconnectorbysortingfreememory*(不需要形如*updateabouthowtoselectconnector...*的啰嗦写法),*fixsucesstipcannotshowonIE8*(不需要形如*fixbugof...*的啰嗦写法)。`$(description)`:可选,详细说明,建议使用列表罗列要点。3.流程提交者发起topic分支到目标分支的MergeRequest。o代码变动要尽量小且专注于一个任务,不要攒的很大,或者做多个任务,要保证审查者可以较快、较容易的Review。o交给别人之前一定要自己先Review一遍,别人只是帮你查漏补缺,对自己的代码负责,不要浪费别人的时间。o发起后,要在GitLab或者其它Review工具上doublecheck变更集。审查者Review代码。o对[编写整洁的代码](#编写整洁代码)中各项要求进行检查o在任何有疑问或建议的地方留comment。o从中学习一些好的东西。o完成后,如果有问题需要修复,留comment“Reviewedandwaitingforfix”,否则进行第4步。提交者响应comments。o确实有问题的,修复之。如果该分支未被其他人使用,应使用`gitcommit--amend`提交以减少不必要的commit历史。o不同意的,讨论。o完成后,留comment“Fixed”,审查者再次检查,回到第二步。审查者确认没有问题之后,将MergeRequest转发给目标分支的维护者进行合并。Research技巧工作中难免需要学习新技术,这个过程中也有一些技巧可以实践。使用Google搜索,除非是特定于国内的东西,比如微信开发相关,不要使用百度。百度搜索质量偏低是事实,一方面是受限于百度自身的技术,另一方面是因为中文搜索有很多垃圾站,以及低质量的转载博客。经常出现前几页都是各种垃圾站在重复同一篇文章,而且广告满天飞,排版稀烂。还有新浪、网易的博客,很多都是复制粘贴的转载,格式一团糟,原文却不知所踪。更不要提很多技术中文资料相对较少,更新不及时,翻译质量不高等等问题。养成使用在Google上使用英文关键词搜索的好习惯绝对可以节省你的大量时间和精力。搜索时要注意时效性取决于具体的技术,搜索出来的东西很多可能已经过时了,要注意区分,不要被过时的东西误导。快速浏览搜索结果时捎带看一下时间也是一个好习惯,有多条相似结果时当然是最新的会靠谱一点。掌握使用搜索引擎的一些小技巧,20TipsToUseGoogleSearchEfficiently注意搜集、整理一些高质量的网站、博客当你研究一个新东西的时候肯定会进行很多搜索,其中有些结果可能质量很高,这时可以快速浏览一下这个网站或者博客的首页,看看是否有收藏价值,或者有没有其它相关文章值得看一下。阅读权威、系统的书籍通过使用搜索引擎或者阅读博客等通常可以对某种技术有个大概了解,或者可以解决某个具体问题,但是对于较复杂的技术,系统学习是必不可少的,看书往往是最有效的方式。可以到豆瓣阅读或者各大电商网站上通过评分排名来筛选好的书籍。如果是国外书籍,尽量选择英文原版,一开始会比较吃力,熟悉了就好了。跟筛选搜索结果一样,尽量选择较新的书籍。持续关注每个人理解新事物都有一个从浅入深的过程,新学的技术最好可以不断夯实,反复咀嚼,不要停留在表面。可以通过订阅一些邮件列表、知名博客来不断补充知识盲点,学习最佳实践,反思自己的不足,以及了解技术的最新动态。作者:大房
本文标题:Be-Professional---项目规范之道(二)
链接地址:https://www.777doc.com/doc-8511557 .html