生产规范与指南
8.1 Owl Movies 生产规范与指南
前端代码规范
JavaScript规范
1.使用空格代替tab进行缩进
使用两个空格代替tab键,对代码进行缩进管理。
2.不能省略分号
每个语句必须以分号结尾,不允许依赖于JS自动添加分号的功能。
3.杜绝var
使用const或let来声明所有局部变量。如果变量不需要被重新赋值,默认应该使用const。
4.使用模板字符串取代连接字符串
在处理多行字符串时,使用模板字符串代替+号连接字符串
5.不要使用eval语句
6.常量的命名规范
常量命名应该使用全大写格式,并用下划线分割,如:
const MAX_LENGTH = 100;
7.使用单引号
只允许使用单引号包裹普通字符串,禁止使用双引号。
项目文件规范
1.文件命名由多个单词组成,采用中划线连接
2.文件名称只由小写英文字母、数字、中划线组成,不应包含特殊符号
3.每个页面的默认入口文件应当命名为index.vue
4.公共组件统一放置在components文件夹中;页面组件统一放置在pages文件夹中,每个页面的文件夹命名参考文件命名规则
5.父组件与子组件间应当以目录结构的方式表现出层级关系,如子组件放置在childrens文件夹中,且childrens文件夹与父组件放置在同一目录下
后端代码规范
本项目后端拟采用Python+Django实现,所以主要定义Python编码的规范。
分号
不要在行尾加分号, 也不要用分号将两条命令放在同一行。
行长度
每行不超过80个字符
以下情况除外:
- 长的导入模块语句
- 注释里的URL
尽量不使用反斜杠连接行,Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 可以利用这个特点。
例如:
foo_bar(self, width, height, color='black', design=None, x='foo',
emphasis=None, highlight=0)
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):
括号
宁缺毋滥的使用括号
除非是用于实现行连接或者是用于元组, 否则不要在返回语句或条件语句中使用括号.
No:
return (foo)
缩进
用4个空格来缩进代码,绝对不要用tab, 也不要tab和空格混用。
- tab对于需要共享的代码而言是灾难。
- 不同编辑器对空格的显示逻辑总是一样的,但是对于tab却五花八门。
使用sublime或者其他编辑器的项目成员,可以设置编辑器用4个空格替代tab。
空行
顶级定义之间空两行, 方法定义之间空一行。
顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行。
空格
按照标准的排版规范来使用标点两边的空格
括号内不要有空格.
按照标准的排版规范来使用标点两边的空格
Yes: spam(ham[1], {eggs: 2}, [])
No: spam( ham[ 1 ], { eggs: 2 }, [ ] )
注释
请尽量添加注释,确保对模块, 函数, 方法和行内注释使用正确的风格。
文件和Sockets
在文件和sockets结束时, 显式的关闭它.
除文件外, sockets或其他类似文件的对象在没有必要的情况下打开, 会有许多副作用, 例如:
- 它们可能会消耗有限的系统资源, 如文件描述符. 如果这些资源在使用后没有及时归还系统, 那么用于处理这些对象的代码会将资源消耗殆尽.
- 持有文件将会阻止对于文件的其他诸如移动、删除之类的操作.
- 仅仅是从逻辑上关闭文件和sockets, 那么它们仍然可能会被其共享的程序在无意中进行读或者写操作. 只有当它们真正被关闭后, 对于它们尝试进行读或者写操作将会跑出异常, 并使得问题快速显现出来.
而且, 幻想当文件对象析构时, 文件和sockets会自动关闭, 试图将文件对象的生命周期和文件的状态绑定在一起的想法, 都是不现实的. 因为有如下原因:
- 没有任何方法可以确保运行环境会真正的执行文件的析构. 不同的Python实现采用不同的内存管理技术, 比如延时垃圾处理机制. 延时垃圾处理机制可能会导致对象生命周期被任意无限制的延长.
- 对于文件意外的引用,会导致对于文件的持有时间超出预期(比如对于异常的跟踪, 包含有全局变量等).
导入格式
导入总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前. 导入应该按照从最通用到最不通用的顺序分组:
- 标准库导入
- 第三方库导入
- 应用程序指定导入
推荐:每种分组中, 应该根据每个模块的完整包路径按字典序排序, 忽略大小写.
命名
应该避免的名称
- 单字符名称, 除了计数器和迭代器.
- 包/模块名中的连字符(-)
- 双下划线开头并结尾的名称(Python保留, 例如__init__)
命名约定
- 所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.
- 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).
- 用双下划线(__)开头的实例变量或方法表示类内私有.
- 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
- 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.