在我熬夜写这个编码规范的时候已经是过了凌晨0点了,正好发了个动态助兴一下,然后低头继续码。。时间是公平的,我并没有比别人多多少时间,依然每天
处理着公司的业务,空的时候看一看技术文档,写一写技术博客,做一做开源项目之类的东西。我对技术报有狂热的追求,以至于上班快两年了养成了当天觉当
天睡的好习惯。我也想玩,但是一想到我前面这么多年浪费了太多时间以至于不敢继续玩下去。熬夜己经习惯,新闻上动不动就报道哪个公司的高管长期熬夜
挂B了,我在想我会不会有一天也会这样。但我没想过我要改变现在这种习惯,至少现在还没有,不管以后怎么样,至少我一直在努力让我的生活更加充实。
现在准备做的一个项目到用angular2,至于angular2我也不熟,而且api在不断的变化,不过值得高兴的是ng2在不仅的几个月后会迎来release版本。
很荣幸 @梦竹 让我担任项目的项目架构,由于自己一直做的后台项目,第一次做前端架构未免比较虛,不过我也在尽力做好。这不,大半夜的还在写文档呢。至于
good idea
这种东西还是让 @梦竹 来想,我的作用是将good idea
变成good product
。。另外,交一下底,我也说过我是第一次正式开发前端项目,所以我并
不能起到绝对的技术领导作用,我们一起做项目只能互相请教一起进步。官网是最好的老师,angular.cn保持英文同步,能对我们学习angular2起到很大的
作用,我们一定要好好李颖。
1. 在开始编码以前先看一看typescript语法,因为我们的项目是基于typescript写的。
2. 然后去angular.cn照着教程敲一敲练习代码。
3. 项目环境不用太在意,基于webpack构建,但是环境一旦搭建好,就不需要太操心。
4. 我们在做项目的时候写的最多的就是组件和service,所以这两块一定要好好看看。
5. 我们css采用的scss预处理器,不懂scss没关系,边写边写,极易上手。
6. 每个组件都有.ts
(组件)、.scss
(样式)、.html
(模板)、.png
(效果图)、.spec.ts
(组件测试)五种文件。
这里的编码规范都是从官网上总结下来的,毕竟官方!!!! 另外有tslint来规范我们的代码,不要有警告。
1. 单一职责。坚持 每个文件只定义一样东西。服务就是服务,组件就是组件,不要在组件里面写模型,也不要服务时写组件。
2. 命名规范。一个项目保持一样的命名风格,以后有几种风格,选其一
1. 使用 .
分割单词 user.model.ts
(本项目使用)
4. 以功能作为后缀 例如 .service
.component
.pipe
.model
3. 为组件和指定添加自定义前缀,防止名字冲突 selector:'xx-xxxx'
4. 单元测试文件以 .spec.ts
结尾 端到端测试文件以 e2e-spec.ts
5. 常量命名一定要全大写,用_
分割单词, 一眼便知
6. 属性和方法首字母小写,不要以_
开头 _xxx
这种习惯不要有
7. 在import的时候大括号两端留一个空格,方便阅读 import { Injectable } from '@angular/core'
;
8. 所有字符串全用单引号''
,每一行结尾要有;
, if(expression) else
即使只有一行也要加 {}
9. 坚持 从零开始,但要时刻考虑应用程序接下来要走的路。没弄明白之前就粘别人的代码是致命的。
10. 创建和导入封装,也就是把所有组件都在一个index.ts中导出合并为一个文件。
11. 模板和样式提取到单独的文件,然后在组件中引入。
12. 坚持 使用 @Input
和 @Output
, 而非 @Directive
和 @Component
装饰器里面的 inputs
和 outputs
属性。
13. 成员顺序,坚持 把属性成员放到顶部,方法成员紧随其后。坚持 先放公共成员,再放私有成员,并按照字母顺序排列。
14. 坚持把逻辑放在service
中,不要在component
中写大量的逻辑。坚持 把组件类中的逻辑限制到只有视图需要的逻辑。所有其它逻辑都应该被放到服务。
15. 坚持 在第三方导入和自己代码的导入之间留一个空行。空行可以让阅读和定位本地导入变得更加容易。
16. 坚持 把展示逻辑放到组件类里,而非模板里。将组件的展示逻辑放到组件类而非模板里,可以增强测试性、维护性和重复使用性。
17. 坚持 在同一个注入器内,把服务当做单例使用。使用它们来共享数据和功能。服务是共享状态性内存数据的理想方法。
export class HeroService {
constructor(private http: Http) { }
getHeroes() {
return this.http.get('api/heroes')
.map((response: Response) => <Hero[]>response.json().data);
}
}
18. 使用 @Injectable()
类装饰器 当服务只接受类型令牌相关的依赖时,比起在每个构造函数参数上使用 @Inject()
, @Injectable()
的语法简洁多了。
19. 分离数据调用。坚持 把数据操作和数据互动重构到服务里。坚持 让数据服务来负责 XHR 调用、本地储存、内存储存或者其他数据操作。
20. 坚持 实现生命周期钩子接口。 import OnInit from '@angular/core'
export class xxx implements OnInit
看到这里了?我们一起来愉快的擼angular2吧。对了,在这之前你需要建立一个自己的分支。happy ending!!!
2016.7.1 01:10 小莫