用7段代码来理解经常使用的写做模式

对于开发者来讲,“设计模式”这个概念确定不陌生,它是通过分类的、代码设计经验的总结,能将编写代码进行工程化,从而提高开发效率。 简而言之,它就是“代码模板”。html

设计模式 + 代码逻辑 => 清晰高效的程序 “写做模式”这个叫法也借鉴于此,是我针对一些热门技术文章的写做方式进行的总结,能帮咱们快速地构思出结构清晰的文章。 下面经过7篇热门技术文章来总结7种写做模式。前端

清单式

举例

《2018年你须要知道的11个JavaScript库》大纲:git

1. Lodash & Underscore
2. Ramda
3. MathJS
4. Moment & date-fns
5. Sugar
6. Lazy
7. CollectJS
8. ChanceJS
9. ChartJS
10. Polished
11. Mout
12. Voca
13. Licia
复制代码

这里列举了13个GitHub上star数量较多的js库,各个库之间是并列的,相互之间并无直接联系,即便调换说明顺序也不会对文章形成影响。程序员

模式

代码

这种模式结构很是简单,咱们能够直接用数组的形式来描述它:github

[
  sectionA,
  sectionB,
  ...
  sectionX,
]
复制代码

小结

把同一类(通常是并列关系)的知识/技能点汇聚起来,分条进行阐述。适用于有必定关联关系,但逻辑性不强的碎片化的知识点。设计模式

对比式

举例

《为何Goroutine能有上百万个,Java线程却只能有上千个?》大纲:跨域

到底什么是线程?

JVM线程使用固定大小的栈
Go线程使用动态大小的栈

JVM线程上下文切换成本高
Go线程切换成本低

结论
复制代码

做者用JVM来指代Java语言,针对线程占用内存空间以及CPU的使用率两个方面,对JVM和Go进行了对比。数组

模式

代码

这种模式能够理解为“清单式”的2.0版本,因此咱们用对象数组来描述它:bash

[
  // 文章主体
  {
    featureA: xxx,
    featureB: xxxx,
w
...
  }, 
  // 参照对象1
  {
    featureA: yyy,
    featureB: yyyy,
    ...
  }, 
  ...
]
复制代码

小结

将两三个相似的概念放在一块儿讨论,在一些特定的维度上将二者进行对比,最后总结出结论。前端工程师

疑问式

举例

《为何给你设置重重障碍?讲一讲Web开发中的跨域》大纲:

1、跨域是个什么「问题」?
2、为何不让我跨域?
3、JSONP——最经常使用的绕过办法
4、为何JSONP能够?
5、跨域资源共享(CORS)
6、不让跨域请求?还能够直接跨网页
复制代码

文章按照 what(什么是跨域) -> why(为何会跨域) -> how(怎么解决跨域) 的思路来进行的写做,具备必定的递进关系。

模式

代码

由于这种模式的出现已经有弱逻辑关系了(顺序上有依赖,内容上无依赖),用串行的函数来描述它最适合不过了:

const sectionA = what();
const sectionB = why();
const sectionC = how();
复制代码

小结

一般由多个相关联的问题组合而成,逻辑关系层层推动,好比why(为何)、what(是什么)、how(怎么样)。

发散式

举例

《普通程序员怎么理解日志系统》大纲:

1. Logging 系统的雏型
2. 何时打印日志是个问题 —— Level
3. 打印日志到哪里是仍是一个问题 —— Appender
4. 日志什么样也是个问题 —— Formatter
5. 高效地打印日志是另一个问题 —— Efficient
6. 总结
复制代码

围绕日志系统分条陈述,包括日志级别、内容、存储、内容、性能。

模式

代码

能够用JSON数据类型来描述这种结构

{
  sectionA: xxx,
  sectionB: yyy,
  sectionC: zzz,
  ...
}
复制代码

小结

和清单式有些类似,但它是将一个具体的概念拆分红多个部分,而后针对每一个部分进行阐述。

流程式

举例

《如何Docker化任意一个应用?你须要参照这10步》大纲:

选择基础镜像
安装必要软件包
添加自定义文件
定义容器运行时的用户权限
定义暴露的端口
定义入口点(entrypoint)
定义一种配置方式
外部化数据
确保处理好日志
轮转日志和其余仅追加文件
复制代码

做者按照操做流程编写文章,具备强逻辑。

模式

代码

咱们仍是用函数来描述逻辑。

const sectionA = step1();
const sectionB = step2(sectionA);
const sectionC = step2(sectionB);
...
复制代码

说明

这种模式并没有太多技巧可言,一般适合实践类型的文章,按照操做顺序来说解。

探索式

举例

《GO千万级消息推送服务》大纲:

技术核心难点
解决技术难点
架构考量
源代码
复制代码

文章结构简单,逻辑清晰,先提出技术难点,而后给出技术解决方案。

模式

代码

这种探索方式和循环有些相似:

while(!isBest(solution)) {
  solution = findBetterSolution()
  ...
}
复制代码

说明

针对开发中的某个问题一步一步探索最优解决方案。通常的思路: 提出问题==>寻找解决方案==>现有方案的问题==>最终优化方案。

插画式

举例

《你闺女也能看懂的插画版Kubernetes指南》这篇文章比较特别和少见,没有明确的提纲,可是丝绝不影响阅读体验,由于图文穿插的方式可以缓解阅读疲劳,同时更容易理解。

模式

代码

若是要用代码来表示这种模式的话那么咱们能够把图片当作注释来进行描述:

// comment sectionA
sectionA
// comment sectionB
sectionB
...
复制代码

小结

图文结合,生动形象。

总结

总结一下本文提到的7种写做模式,他们是:

  • 清单式。
  • 对比式。
  • 疑问式。
  • 发散式。
  • 流程式。
  • 探索式。
  • 插画式。 固然咱们在写较长的文章的时候能够将多种写做模式结合起来,全文用某种模式,而不一样章节内部用其它模式。

若是要把这7种写做模式抽象成写做原则的话,那么能够用两个词归纳:转化和联接

何谓转化?

  • 把复杂的事情讲简单。
  • 把简单的道理讲深入。

何谓联接?

  • 把分散的东西关联起来。
  • 把关联的东西拆开对比。

最后给读者一个思考题来检验阅读效果:本文属于那种写做模式,你有没有看出来呢?

原文连接:tech.gtxlab.com/writing-sch…


做者信息:朱德龙,人和将来高级前端工程师。

相关文章
相关标签/搜索