命名

  • 类名遵循 SRP(单一职责原则)
  • 包名 限定范围(对象组合抽象、命名空间)
  • 模块名 参考:COLA 架构、CQRS 架构(以业务为核心,解耦外部依赖,分离业务复杂度和技术复杂度)

命名工具

数据埋点

业务数据化 数据业务化

  1. 数据采集
  2. 数据传输
  3. 数据建模
  4. 数据统计
  5. 数据可视化

破窗效应

遵守规范,不打破第一扇窗,及时修复破窗。写代码需要工匠精神。

职责单一(SRP)

一个方法只做一件事情,高内聚,提高代码复用。

精简辅助代码

区分业务代码和辅助代码(判空,鉴权,缓存等),业务代码尽量减少辅助代码,使业务清晰。

  • 解耦
  • 服务降级

架构本质

要素结构:代码核心组成要素,代码如何组织就是结构。结构是要素之间的相互关系。
应用架构就是处理模块、组件、包、类之间的关系,灵活组织代码,快速迭代。

阿里云应用生器 https://start.aliyun.com/bootstrap.html

抽象层次一致性 (SLAP)

函数只显示处理业务主要步骤,具体的实现细节通过私有方法封装,并通过抽象一致性来保证,一个函数的抽象在同一个水平上,而不是高层抽象和实现细节混杂在一起。
eg:

1
2
3
4
5
6
7
8
public void mackCoffee() {
// 1.倒入咖啡粉
pourCoffeePowder();
// 2.加入沸水
pourWater();
// 3.搅拌
stir();
}

如果加入新需求,可以选择不同的咖啡粉,以及不同的风味。增加选择风味步骤,选择不同的咖啡粉,通过倒入咖啡粉的细节实现。

1
2
3
4
5
6
7
8
9
10
public void mackCoffee(boolean isMilkCoffee, boolean isSweetTooth, CoffeeType type) {
// 1.倒入咖啡粉(支持选择咖啡粉)
pourCoffeePowder(type);
// 2.加入沸水
pourWater();
// 3.选择口味
flavor(isMilkCoffee, isSweetTooth);
// 4.搅拌
stir();
}

函数式编程

冗余程度:类 > 匿名类 > Lamda(匿名函数) > 方法引用

开闭原则(OCP)

现有功能开发完成,如果有新的需求,那么尽量不要修改之前功能代码,保证之前代码能正常运行(关闭)。只对现有功能进行扩展(开放)。一般使用以下方法进行扩展:

  1. 继承(封装不变的部分,通过接口继承实现开放)
  2. 多态
  3. 装饰者模式(包装不变的部分)
  4. 策略模式
  5. 适配模式
  6. 观察者模式(通过灵活添加和删除扩展)

里氏替换原则(LSP)

子类替换基类,代码还能正常工作。