Permalink
master
Switch branches/tags
Could not load branches
Nothing to show
{{ refName }}
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
- Go to file
- Copy path
- Copy permalink
ProgramLover books
Latest commit 4331a90 Oct 9, 2016
History1 contributor
Users who have contributed to this file
15 MB
Download
- Open with Desktop
- Download
- Delete file
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
[toc] 我们可以使用 try/catch/finally 来捕获错误和抛出错误。 抛出的每个异常,都应当提供足够的环境说明,以判断错误信息的来源和位置。同时应创建信息充分的错误消息,并和异常一起传递出去,在消息中,应包括失败的操作和失败的类型。代码整洁之道
第一章
第二章
第三章
第四章
第五章
第七章
第八章
第十二章
第十四章
results matching ""
No results matching ""
官网://haomo-tech.com代码整洁之道
作者:毫末科技
邮箱:
概述
本章节主要目的是为了规范代码编写过程中的几个标准,防止写出难以维护和修改的代码。
定义
糟糕的代码(简笔画)
编写过程没有构思,从头写到尾
命名混乱
缺乏注释信息
代码臃肿
公共方法和组件没有抽离
核心逻辑无法测试
整洁的代码(素描)
编写过程有构思,以点到面
命名干净整洁
提供信息类注释
代码短小精悍
公共部分能很好的抽离
核心逻辑通过测试用例保证代码质量
必要性
写出糟糕代码的原因:
任务时间评估有偏差,为了赶时间不顾代码质量
没有养成编写整洁代码的方法和习惯
......
项目经理是进度和需求的守护者,程序员是代码质量的守护者。
面对项目经理的压力,我们应该如实告诉项目经理任务中遇到的问题以及导致任务时间偏差的原因,而不是逃避问题并制造混乱。写出整洁的代码,守护住代码的质量是程序员专业性的体现。
糟糕的代码难以维护和修改,会严重拖累项目的质量进度。
方法
有意义的命名
- 避免无意义的命名,例如a、b、c,使用他人可以读懂的命名
- 使用读的出来的名称,addUser
- 避免误导,例如userIdList为String[]类型而非List类型,应该取名为userIds
- 命名应该为动词+名词或名词
示例:
设计云组件ID命名:动词(操作)+名词(表名+(字段名)+组件名)
//dev.block-design.cn/edit-page/?pageId=1417653844220841986
示例
添加用户按钮(addSysUserButton)、用户表格(sysUserTable)、添加用户名称输入框(addSysUserNameInput)
函数
短小,每个函数只说一件事
函数参数保证在三个以内,越少越好
示例:
function() { // 加载系统所有的角色 let url = '//ckjd.dev.haomo-tech.com/api/sys/role/list'; this.$getAction(url).then(res => { console.log('加载系统所有角色:', res); this.allRoles = res.result.records; this.newRolename.options = this.allRoles.map(role => { return { label: role.roleName, value: role.id } }); this.editRolename.options = this.allRoles.map(role => { return { label: role.roleName, value: role.id } }); console.log('加载系统所有角色1:', this.newRolename); }) }重构后:
function() { // 获取角色信息 this.getRoles = function(){ let url = '//ckjd.dev.haomo-tech.com/api/sys/role/list'; this.$getAction(url).then(res => { this.setRoles(res.result.records); }) }; // 渲染角色信息 this.setRoles = function(roles){ let roleOptions = this.transformRolesToOptions(roles); this.newRolename.options = roleOptions; this.editRolename.options = roleOptions; }; // 转化角色信息为配置项信息 this.transformRolesToOptions = function(roles){ return roles.map(role => {return {label: role.roleName, value: role.id}}); } this.getRoles(); }注释
- 尽量使用整洁的代码进行解释,而非使用注释
- 编写信息类注释,例如函数注释(参数、返回值的类型和解释)、对意图的解释、TODO注释
格式
- 代码编写完通过格式化工具进行格式化处理
- 缩进应该使用两个空格
边界
- 学习型测试第三方工具,使用测试用例来对第三方工具进行学习
单元测试
- 核心逻辑使用TDD测试驱动开发,先编写测试用例和断言,再编写代码实现来通过测试,再对代码进行重构
- 每个测试用例对应一个断言
规范
- 组件ID命名:动词(操作)+名词(表名+(字段名)+组件名)
- 函数不应超过20行,参数不超过三个
- 代码需要格式化处理,缩进两个空格
- 核心逻辑使用测试用例驱动开发
参考
- 代码整洁之道