代码精进之路

第一章 命名

好的命名能够让代码清晰,增加代码的表达力。

好的命名能够减少心智负担。

好的命名是写好代码的基础。

在计算机科学中有两件难事:缓存失效和命名。

有意义的命名

代码即文档,可读性好的代码应该有一定的自明性。

变量名:变量名应该是名词。

函数名:函数的命名要体现做什么,而不是怎么做。

类名:实体类,辅助类;辅助类辅助实体类完成业务逻辑。

包名:包代表了一组有关系的类的集合,起到分类组合和命名空间的作用。

模块名:在包之上的再一层分类。

保持一致性:保持命名一致性。

约定:命名一致性。create add remove updae get list page count

使用对仗词:open close on off

后置限定词:total sum avg max min

统一语言:UML

中间变量:灵活使用中间变量,有助于提升代码的表达力

小心注释:别给糟糕的代码加注释–重新写吧。不要复述功能,要解释背后意图。

使用命名工具,他山之石,可以攻玉。

第二章 规范

认知成本:人们获得知识和应用知识的过程。获得知识是需要学习的。在学习的过程中,要交的学费就叫做认知成本。

混乱的代价:混乱无法形成有效的记忆和认可,每次面对问题都是新问题,都需要重新理解一遍。

分门别类,收纳整理

混乱是有代价的,将有限的精力用在刀刃上,而不是用来疲于应对各种不一致和随心所欲的混乱。

代码规范

代码格式:统一格式,缩进、水平对齐、注释格式。

空行规范:分组、每个空白行都是一条线索、提示你下一组代码表示的是不同的概念或功能。逻辑概念的组织和区隔需要靠自己把握,简单的原则就是将概念相关的代码放在一起:相关性越强,彼此之间的距离应该越短。

命名约定:

  • 类名:大驼峰
  • 方法名:小驼峰
  • 常量名:全大写+下划线
  • 枚举类:以Enum或Type结尾
  • 抽象类:Abstract开头

日志规范

养成撰写日志的习惯,日志在排查故障方面有不可或缺的作用。

日志级别:

  • ERROR:不能自己恢复的错误,需要立即被关注和解决,需要接入监控和报警系统,需要人工介入,及时止损。
  • WARN:短时间产生过多的WARN日志,也是系统不健康的表现。
  • INFO:用于记录系统的基本运行过程和运行状态。
  • DEBUG:用于输出调试信息,开发环境需打开DEBUG日志,便于开发和测试。生产环境,则需要开闭DEBUG,免得暴露重要信息。

基于分布式配置工具实现基于requestId判断日志过滤,从而打印所需请求日志。

异常规范

异常分类:业务异常、系统异常

针对异常需要做统一的处理。

错误码:编号错误码、显示化错误码:类型+场景+自定义标识。

错误类型:P参数异常、B业务异常、S系统异常。

埋点规范:埋点对于互联网运营至关重要

架构规范

前后端分离、oss文件存储、mysql主从备份、反向代理

防止破窗:维护代码,迭代代码

混乱会造成复杂,有序会减少复杂。制定规范为了从无序走向有序,减少认知成本。制定完规范后,需要建立完善的代码审查机制

第三章 函数

把简单的事情做到极致,功到自然成,最终,止于至善。

好的函数能够大大降低阅读代码的困难度,提升代码的可读性。

函数:一组代码的集合,是程序中最小的功能模块,一次函数调用包括接受参数输入、数据处理、返回结果。

函数参数:最理想的参数数量是零、其次是一、再次是二、应尽量避免三个参数,参数对象化

短小的函数:短小的函数更易于理解

职责单一:一个方法只做一件事情

精简辅助代码:判空,日志,授权

优化匹配:数组键匹配,map

优雅降级:当外部服务不可用时,替换为默认选项

组合函数模式:要求所有公有函数读起来像一系列执行步骤的概要,而这些步骤的真正实现细节是在私有函数里面

养成好的编码习惯:只有养成精益求精,追求卓越的习惯,才能写入更好的代码

抽象层次一致性(SLAP):组合函数要求将一个大函数拆分成多个子函数的组合,子函数的内容必须在同一个抽象层次上

金字塔结构:一种自上而下的,符合人类思维逻辑的表达方式

函数式编程:函数式编程中最重要的特征之一,就是你可以把函数作为参数传递给另外一个参数

1、减少冗余代码 2、函数中规避共享变量

第四章 设计原则

每个人都有义务捍卫、遵守或完善原则。原则可以修正,但是不能肆意妄为。

所谓原则,就是一套前人通过经验总结出来的,可以有效解决问题的知道思想和方法论。遵从原则,可以事半功倍。

SOLID原则:SRP 单一职责、OCP开闭原则、LSP里氏替换原则、ISP接口隔离原则、DIP依赖倒置原则

  • OCP:在面向对象设计中,通过继承和多态来实现OCP,即封装不变部分。对于需要变化的部分,通过接口继承的方式来实现开放。很多设计模式都以达到OCP为目的,装饰者模式、策略模式、适配器模式、观察者模式
  • LSP:程序中的父类型都应该可以正确地被子类型替换
  • ISP:不强迫用户去依赖那些他们不使用的接口
  • DIP:模块之间交互应该依赖抽象,而非实现,要求高层模块不应该依赖于底层模块,二者都应该依赖于抽象
  • DRY:避免重复代码,系统的每一个功能都应该有唯一的实现,贯彻DRY可以避免陷入散弹式修改

YANGNI:你不会需要它

RULE OF THREE:当某个功能第三次出现的时候,就应该进行抽象化了

KISS:保持简单,先发散、再收敛、把握问题核心

POLA:最小惊奇原则,要简单易懂,不要时不时引起惊奇

第五章 设计模式

利用模式,可以让一个解决方案重复使用,而不是重复造轮子

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性,继承性和多态性,以及类的关联关系和组合的充分理解

GOF设计模式

第六章 模型

建模的艺术就是去除和问题无关的部分

模型:是对现实世界的简化抽象。

处理问题,只专注于重要的方面,抓住问题的本质,这也是建模和抽象的价值所在。

物理模型、数学模型、概念模型、思维模型、领域模型

建模工具UML

第七章 DDD的精髓

你可以,但不代表你应该。

数据驱动、领域驱动

ORM:对象关系映射

第八章 抽象

人类之所以成为人类,是因为人类能够想象。

抽象:指为了某种目的,对一个概念或一种现象包含的信息进行过滤,移除不相关的信息,只保留与某种最终目的相关的信息。

面向对象思想:面向对象分析、面向对象设计、面向对象编程。

软件领域的任何问题,都可以通过增加一个间接的中间层来解决。

寻找共性:抽象的过程就是合并同类项、归并分类和寻找共性的过程。

提升抽象层次:通过上升一个抽象层次的方式,让它们在更高的抽象层次上产生逻辑关系。

构筑金字塔;自下而上地思考,总结概括;自上而下地表达,结论先行。

多总结:写文章,记录是很好的总结习惯,用自己的话总结归纳。

领域建模:对问题分析、整理和抽象时,或对领域进行划分和建模时,实际上都是在锻炼我们的抽象能力量。

第九章 分治

分治:降低在任意时间所要思考问题的复杂度。

分治算法、归并排序、二分搜索、K选择问题

写代码的两次创造:实现功能、重构优化

分层设计:分离关注,简化复杂问题,每一层职责单一

分层架构:通过分离关注点来降低系统的复杂度,同事满足单一职责、高内聚、低耦合、提高可复用性和降低维护成本。

数据拆分:横切和竖切

学会如何对复杂问题进行分层和拆解,是我们解决复杂问题的第一步

第十章 技术人的素养

未经审视的人生不值得过

软件的第一性原理:控制软件复杂度

学习编程艺术首先要学会基本的规则,然后才能知道什么时候去打破规则

敏捷开发:是基于迭代模型发展起来的一套软件开发指导原则

基本业务流程:需求、分析与设计、实现、测试、部署

贫血还是充血模型,贫血提倡模型对象仅包含数据及仅要的set get 方法,而充血模型则提倡数据及行为放置一起

单体还是分布式:具体情况具体分析

批判性思维:运用推理去断定一个断言是否为真的能力

成长型思维:相信可以通过学习提升自我,相信学习和成长力量,相信努力可以改变智力的能力

结构化思维:逻辑+套路

如何落地新团队:业务、技术、人

结构化表达:提出问题、定义问题、分析问题、解决问题、展望未来

电影镜头思维:先从远拉近,再由近拉远

工具化思维:在有效的工作中,最重要的是思考,而人在思考时通常看上去不会那么忙

自动化思维:当同样的事情做了3次以上,就应该停下来,是否可以通过自动化脚本来提效

好奇心:学习的动力不应该来自外界的强力,而应该来自于内在,来自于我们内心对知识的渴望,对世界的好奇心。好奇心是学习的起点,是创新的原动力

记笔记:记录便于持续跟进学习,量化指标,利于知识内化,形成知识体系,方便回顾。使用云笔记、归类分组、不要复制黏贴、结构化表达

目标:先想清楚目标,然后努力实现。不管是人生大问题,还是阶段性要完成的事情,都需要目标清晰、有的放矢

学习:在学习之前,一定要问自己,这次学习的目的是什么?

选择的自由:自由是一种价值观,是一种为自己过去、现在及未来行为负责的价值观。自由是一种责任,是一种敢于做出选择,并愿意为自己的选择承担后果的责任。当外界的刺激时,总是可以用自我意识、想象力、良知和独立意志做出自己的选择。

但凡成大事者,都能够“处乱世而不惊,临虚空而不惧,喜迎阴晴圆缺,笑傲风霜雪雨”

平和的心态:动机至善,了无私心;用无为的心,做有为的事。当我放下得失心,让自己平静下来,整个人仿佛获得了重生。

真正平和的人了解自己所有的主观感受都只是一瞬间的波动。虽然疼痛,但不再感到悲惨;虽然愉悦,但不再干扰心灵的平静。于是,心灵变得一片澄明、自在。

精进:就是每天必须进步一点点,慢就是快。但凡能持续学习和精进的人,其结果都不会差

第十一章 技术leader的修养

好坏代码的标准

技术分享:输出倒逼输入的有效手段

代码审查:保证代码质量和架构风格一致性的重要手段

学习能力、阅读能力、理解能力

目标管理:指定目标,提供帮助和指导

KPI: 关键绩效指标

OKR:目标与关键成果

SMART原则:明确性、衡量性、实现性、相关性、时限性

技术规划:分而治之,把问题分解成几个不同层次的、相对较小的问题来看

推理阶梯:个人的判断大部分基于自身的主观认识而非事实,大脑最习惯于推理。别人的一个眼神、一个动作,就有可能让我们在大脑中产生不客观的推理。

leader:领导人心,是引领和激发

manager:管理事务,是控制和权威

视人为人:我们唯有尊重自己,尊重他人,视人为人,视己为人,对团队倾注感情,和团队成员建立信任关系,才有可能做一个号leader

绩效货币:对事的;关系货币:对人的。

对上级,有胆量;对平级,有肺腑;对下级,有心肝;

第十二章 COLA架构

软件的首要技术使命,管理复杂度。

COLA:整洁面向对象分层架构。

软件架构:业务架构、应用架构、系统架构、数据架构、物理架构、运维架构

分层架构:网络七层模型

CQRS:使用分离的接口将数据查询操作和数据修改操作分离开。

六边形架构:端口-适配器架构

洋葱架构:外层依赖内层,内层对外层无感知。

COLA架构设计

  • 传统分层架构:展现层、业务逻辑层、数据访问层
  • COLA分层架构:展现层、(应用层、领域层、基础设施层)、数据访问层

无有必要,勿增实体,能简单做的事情,不要复杂化。

测试:有单元测试和集成测试作为保障,在引入新的功能或者对老代码进行重构时,才更有信心。

做好设计、写好代码的初心不应该改变,持续精进和持续学习热情不应该改变,追求卓越和工匠精神的决心不应该改变。
原文链接:代码精进之路

写的不好,就当是整理下思绪吧。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!