读 Angular 代码风格指南
读 Angular 代码风格指南
本文写于 2021 年 1 月 17 日
原文地址:Angular 文档
该文章拥有完整的代码风格指南——大到如何编排文件夹,小到如何进行变量命名都涉及。但是与 ng 略有绑定,所以这里整理一下可以单独拿出来的通用部分。
单一职责
请坚持每个文件只定义一样东西(例如服务或组件),并且把文件大小限制在 400 行代码以内。
小文件通常非常容易阅读、维护,并能防止在版本控制系统里与团队冲突。
小文件还可以防止一些隐蔽的程序缺陷,当把多个组件合写在同一个文件中时,可能造成共享变量、创建意外的闭包,或者与依赖之间产生意外耦合等情况。
总的来说,单一职责原则可以让代码更加可复用、更容易阅读,减少出错的可能性。
如果该文件是一个函数,那么请坚持定义简单函数,并且限制在 75 行之内。
这样能更便于我们做单元测试。
命名
命名是一件非常重要的事情,他可以让其他人看我们的代码,或者是我们自己在一段时间之后再看之前的代码时,可以迅速理解文件内容、变量含义、方法用途……。也可以在全局搜索的时候,让我们可以迅速定位到目标。
代码给人读的时间比给机器读的时间多多了,因此我们需要慎重考虑命名。
可以遵循以下两个原则:
- 坚持使用一致的命名规则;
- 坚持遵循同一个模式来描述特性和类型。
文件命名
ng 推荐使用点和横杠来分隔文件名——在描述性名字中,用横杠来分隔单词;用点来分隔描述性名字和类型。
具体来说,就是先描述组件特性,再描述它的类型的模式,并且对所有组件使用一致的类型命名规则!!!
也就是 feature.type.ts,例如 hero.service.ts, app.module.ts, home.component.html, global.style.css。
常常使用的后缀有 *.service、*.component、*.pipe、.module、.directive。如果有必要,可以创建更多类型名,但必须注意,不要创建太多了。
这样命名文件可以让我们来快速的识别文件中有什么,并且轻松的利用编辑器或者 IDE 的模糊搜索功能找到特定文件类型。或是为自动化任务提供模式匹配。
文件名与符号名
如果将将文件命名为 hero.service.ts,那么符号名,即类/变量名,应该命名为 HeroService。
若为 todo-list.service.ts,则该命名为 TodoListService。
也就是说,使用大写驼峰命名法来命名类,并且需要匹配符号名与它所在的文件名,在符号名后面追加约定的类型后缀(例如 Component、Service)。
单元测试文件名
应该与测试的文件保持一致,xxx.xx.ts 的单元测试文件名应该叫做 xxx.xx.spec.ts。
结构组织与 LIFT 原则
我们应该力求项目结构组织符合 LIFT 原则:
- Locate 快速定位代码
- Identify 一眼识别代码
- Flattest 尽量保持扁平结构
- Try Do Not Repeat Yourself 尝试遵循不重复自己的原则
上述四项原则重要程度从大到小。
为何?
LIFT 提供了一致的结构,它具有扩展性强、模块化的特性,它让我们可以快速锁定代码,提高开发的效率。
另外,检查应用结构是否合理的方法是问问自己:“我能快速打开与此特性有关的所有文件并开始工作吗?”
Locate(定位)
坚持直观、简单和快速地定位代码。
要想高效的工作,就必须能迅速找到文件,特别是当不知道(或不记得)文件名时——把相关的文件一起放在一个直观的位置可以节省大量的时间。
并且富有描述性的目录结构会让你和后面的维护者眼前一亮!!!
可以使用上面说的,使用 特性 + 后缀 + 文件类型 的命名方式来方便我们的定位
Identify(识别)
文件的名字请达到这个程度:看到名字立刻知道它包含了什么,代表了什么。
文件名要具有说明性。保证文件名精准的方法就是:确保文件中只包含一个组件。
避免创建包含多个组件、服务或者混合体的文件。
为何?
花费更少的时间来查找和琢磨代码,就会变得更有效率。较长的文件名远胜于较短却容易混淆的缩写名。
Flattest(扁平)
请坚持尽可能保持扁平的目录结构。
考虑当同一目录下达到 7 个或更多个文件时创建子目录。
考虑配置 IDE,以隐藏无关的文件,例如生成出来的 .js 文件和 .js.map 文件等。
没人想要在超过七层的目录中查找文件!!!
扁平的结构有利于搜索。
另一方面,心理学家们相信,当关注的事物超过 9 个时,人类就会开始感到吃力。所以,当一个文件夹中的文件有 10 个或更多个文件时,可能就是创建子目录的时候了。
还是根据你自己的舒适度而定吧。除非创建新文件夹能有显著的价值,否则尽量使用扁平结构。
Try Do Not Repeat Yourself (T-DRY)
坚持 DRY(Don't Repeat Yourself,不重复自己)。
避免过度 DRY,以致牺牲了阅读性。
虽然 DRY 很重要,但如果要以牺牲 LIFT 的其它原则为代价,那就不值得了。这也就是为什么它被称为 「Try」-DRY。
推荐的目录结构
坚持把所有源代码都放到名为 src 的目录里。
坚持如果组件具有多个伴生文件 (.ts、.html、.css 和 .spec),就为它创建一个文件夹。
我习惯使用的前端目录结构:
- src
- app
- moduleA // 模块 B
- assets
- components
- ...
- moduleB // 模块 A
- shared // 共享模块
- layouts
- assets
- main.ts
- ...
(完)
读 Angular 代码风格指南的更多相关文章
- python的PEP8 代码风格指南
PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...
- C++代码风格指南总结
C++代码风格指南 代码风格的重要性 今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕 细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现 ...
- Google JavaScript代码风格指南
Google JavaScript代码风格指南 修正版本 2.28 Aaron Whyte Bob Jervis Dan Pupius Eric Arvidsson Fritz Schneider R ...
- 《Google 代码风格指南》
<Google 代码风格指南> https://github.com/google/styleguide
- 大神的JS代码风格指南
js代码风格指南:1.缩进使用空格,不要用制表符2.必须用分号3.暂时不用ES6(modules)例如export和import命令4.不鼓励(不禁止)水平对齐5.少用var 都应该使用const或者 ...
- python代码风格指南:pep8 中文翻译
摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见PEP7.本文和PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...
- python代码风格指南:pep8 中文版
本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Python代码.请参阅PEP关于Python的C实现的C编码风格指南的描述. 本文档和PEP257(文档字符串规范)改编自Guid ...
- GO代码风格指南 Uber Go (转载)
原文地址:https://github.com/uber-go/guide/blob/master/style.md 译文出处:https://github.com/uber-go/guide 本文永 ...
- C#现代代码风格指南
参考资料: asp.net 主页仓库 代码风格 -- 一般原则 最通用的指导原则是我们使用所有的VS默认设置的代码格式,除了我们把系统命名空间放在其他命名空间之前(这在VS中是默认的,但是在VS的更新 ...
随机推荐
- Java 线程数过多会造成什么异常?
1.线程的生命周期开销非常高 2.消耗过多的 CPU 资源 如果可运行的线程数量多于可用处理器的数量,那么有线程将会被闲置.大量空 闲的线程会占用许多内存,给垃圾回收器带来压力,而且大量的线程在竞争 ...
- 学习ELK日志平台(五)
ELK Stack 通常情况下: 1,开发人员是不能登录线上服务器查看日志信息 2,各个系统的日志繁多,日志数据分散难以查找 3,日志数据量较大,查询速度慢,数据不够实时性 4,一个调用会涉及到多个系 ...
- Python turtle 模块可以编写游戏,是真的吗?
1. 前言 turtle (小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏,甚至可以当成简易的 GUI 模块,编写简单的 GUI 程序. 本文使用 tu ...
- (stm32f103学习总结)—stm32 PMW输出实验
一.PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简 ...
- Linux系统下ifconfig命令使用及结果分析
Linux下网卡命名规律:eth0,eth1.第一块以太网卡,第二块.lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位.它代表你的机器本身. 1.ifconfig是查看网卡的信息. if ...
- led指示灯电路图大全(八款led指示灯电路设计原理图详解)
led指示灯电路图大全(八款led指示灯电路设计原理图详解) led指示灯电路图(一) 图1所示电路中只有两个元件,R选用1/6--1/8W碳膜电阻或金属膜电阻,阻值在1--300K之间. Ne为氖泡 ...
- 调试了一个早上, 定位了一个chrome的新问题, 新版chrome 不能有效的追踪客户来源Referer了
- SpringMVC 解析(四)编程式路由
多数情况下,我们在使用Spring的Controller时,会使用@RequestMapping的形式把请求按照URL路由到指定方法上.Spring还提供了一种编程的方式去实现请求和路由方法之间的路由 ...
- C语言之:结构体动态分配内存(利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号、姓名和三门课(高数、物理和英语 )的成绩和平均分(整型)。)
题目内容: 利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号.姓名和三门课(高数.物理和英语 )的成绩和平均分(整型). 编写程序,从键盘输入学生的人数,然后依次输入每个学生的学号. ...
- OllyDbg---汇编指令
汇编指令 NOP 无操作 运行这条指令时,不会对寄存器.内存以及堆栈造成任何影响,也就是无操作. 当用一个短指令来替换一个长指令时,如果处理器没有错误,多余的空间将会被NOP填充. 适当数目的NOP指 ...