Growth:全栈增长工程师指南学习笔记
关于工具:
没有合适的工具,要么创造一个,要么选择一个合适的。
提高效率的工具:
使用快捷键
输出是最好的输入
写博客、整理资料、准备分享
JavaScript
完整的javascript应该由下面三个部分组成:
核心(ECMAScript)
---核心语言功能
文档对象模型(DOM)
---访问和操作网页内容的方法和接口
浏览器对象模型(BOM)
---与浏览器交互的方法和接口
前端和后台
前端和后端是描述进程开始和结束的通用词汇。前端作用于采集输入信息,后端进行处理。
MVC对于系统的分层:
-
表现层:提供服务、显示信息、用户请求、HTTP请求和命令行调用;
-
领域层:逻辑处理,系统中真正的核心;
-
数据层:与数据库、消息系统、事物管理器和其他软件包通讯。
Model
模型用于封装与应用程序的业务逻辑相关的数据以及数据处理方法。
它是介于数据与控制器之间的层级,拥有对数据直接访问的权力--增删改查(CRUD)。
在实现这个层级与数据库交互时,可以试用SQL语句,也可以使用ORM框架。
SQL(Structured Query Language,即结构化查询语句),语句是数据库的查询语言。
ORM(Object Relational Mapping,即对象关系映射),主要是将数据库中的关系数据映射称为程序中的对象。
View
View层在Web应用中,一般是使用模板引擎装载对应HTML。
View层不仅仅只有模板作用,还可以计划部分逻辑。
Controller
控制器层起到不同层面间的组织作用,用于控制应用程序的流程。
后台即服务
BaaS(Backend as a Service)是一种新型的云服务,旨在为移动和Web应用提供后端云服务,包括云端数据/文件存储、账户管理、消息推送、社交媒体整合等。
数据持久化
数据通常是以文件的形式存储,毕竟文件是存储信息的基本单位。只是由于业务本身对于Create、Update、Query、Index等有不同的组合需求就引发了不同的数据存储软件。
前端对数据的操作有三种类型:
-
数据库。使用Node.js与传统的Model层并没有多大不同,要么直接操作数据库,要么间接操作数据库。即使在NoSQL数据库中也是如此。
-
搜索引擎。对于以查询为主的领域来说,搜索引擎是一个更好的选择,而搜索引擎又不好直接向View层暴露接口。
-
RESTful。RESTful相当于是CRUD的衍生,只是传输介质变了。
-
LocalStorage。算是另外一种方式的CRUD。
搜索引擎
从架构上来说:使用搜索引擎的优点是:分离存储、查询部分。
-
索引服务
-
搜索服务
-
索引数据
Tasking
-
有一个明确的实现目标
-
评估目标并将其拆解成任务(TODO)
-
规划任务的步骤(TODO)
-
学习相关技能
-
执行Task,遇到难题就跳转第二步
下面以如何开发一个博客系统为例,介绍如何Tasking
-
规划一下博客所需的功能--后台、评论、Social等等,并且需要设计博客的Mockup(小样)
-
简单设计一下系统的架构,如传统的前后端结合
-
进行技术选型--使用哪个后端架构、使用哪个前端架构
-
创建Hello,World,然后开始进行一个功能的编码工作
-
编码时需要不断地查看、添加测试等
-
完成一个个功能的时候,我们会得到一个子模块
-
依据一个个子模块,得到博客系统。
单元测试
单元测试应该是最多的,也是最底层的。其次才是服务测试,最后是UI测试。大量的单元测试可以保证我们的基础函数是正常的、正确工作的。
单元测试是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
当单元测试达到一定的覆盖率,代码才会变得更健壮。因为需要保证代码是可测的,也意味着代码间的耦合度会降低。TDD会促使我们写出精短的代码。如果代码是有测试的,单元测试可以半只未来重构代码。
自动化UI测试
-
运行起网站
-
添加一些mock的数据,以使网站看上去正常
-
开始运行测试
四阶段测试:
-
Setup。这个阶段做一些准备工作,如数据准备和初始化等等。
-
Execute。在执行阶段就是做好验证结果前的工作。
-
Verify。在验证阶段,就是验证返回的结果和我们预期的一致。
-
TearDown。收尾工作。
测试替身
-
Stub是一种状态确认,他用简单的行为来替换复杂的行为。
-
Mock是一种行为确认,他用于模拟其行为。
Stub从某种程度上来说,会返回我们一个特定的结果,用代码替换方法;而Mock只是确保这个方法被调用。
测试驱动开发
主要过程是:红-->绿-->重构
-
先写一个失败的单元测试。
-
让测试通过。
-
重构,并改进功能代码,让它变得更加合理。
可读的代码
-
确保变量名、函数名是易读的
-
没有复杂的逻辑判断
-
没有多层嵌套(事不过三)
-
减少复杂函数的出现(如,不超过30行)
-
然后,去测试它。
关于命名:
-
选择专业的词。最好是可以和业务相关的,它应该极具表现力。
-
避免像tmp和retval这样泛泛的名字。
-
用具体的名字代替抽象的名字。
-
为名字赋予更多的信息。
-
名字应该有多长。
-
利用名字的格式来传递含义。
代码重构
Code refactoring 指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。
短而精巧的函数有以下特点:
-
如果每个函数的粒度都很小,那么函数被复用的机会就会更大;
-
是会让高层函数读起来像一系列注释一样,容易理解;
-
如果函数都是细粒度的,那么函数的复写也会更加容易。
隔离与运行环境
-
隔离硬件:虚拟机
-
隔离操作系统:容器虚拟化
-
隔离底层: Servlet容器
-
隔离依赖版本:虚拟环境
-
隔离运行环境:语言虚拟机
-
隔离语言:DSL