命名
- 类名遵循 SRP(单一职责原则)
- 包名 限定范围(对象组合抽象、命名空间)
- 模块名 参考:COLA 架构、CQRS 架构(以业务为核心,解耦外部依赖,分离业务复杂度和技术复杂度)
命名工具
- OnlineSearch 插件
- https://unbug.github.io/codelf/
数据埋点
业务数据化 数据业务化
- 数据采集
- 数据传输
- 数据建模
- 数据统计
- 数据可视化
破窗效应
遵守规范,不打破第一扇窗,及时修复破窗。写代码需要工匠精神。
职责单一(SRP)
一个方法只做一件事情,高内聚,提高代码复用。
精简辅助代码
区分业务代码和辅助代码(判空,鉴权,缓存等),业务代码尽量减少辅助代码,使业务清晰。
- 解耦
- 服务降级
架构本质
要素结构:代码核心组成要素,代码如何组织就是结构。结构是要素之间的相互关系。
应用架构就是处理模块、组件、包、类之间的关系,灵活组织代码,快速迭代。
阿里云应用生器 https://start.aliyun.com/bootstrap.html
抽象层次一致性 (SLAP)
函数只显示处理业务主要步骤,具体的实现细节通过私有方法封装,并通过抽象一致性来保证,一个函数的抽象在同一个水平上,而不是高层抽象和实现细节混杂在一起。
eg:
1 | public void mackCoffee() { |
如果加入新需求,可以选择不同的咖啡粉,以及不同的风味。增加选择风味步骤,选择不同的咖啡粉,通过倒入咖啡粉的细节实现。
1 | public void mackCoffee(boolean isMilkCoffee, boolean isSweetTooth, CoffeeType type) { |
函数式编程
冗余程度:类 > 匿名类 > Lamda(匿名函数) > 方法引用
开闭原则(OCP)
现有功能开发完成,如果有新的需求,那么尽量不要修改之前功能代码,保证之前代码能正常运行(关闭)。只对现有功能进行扩展(开放)。一般使用以下方法进行扩展:
- 继承(封装不变的部分,通过接口继承实现开放)
- 多态
- 装饰者模式(包装不变的部分)
- 策略模式
- 适配模式
- 观察者模式(通过灵活添加和删除扩展)
里氏替换原则(LSP)
子类替换基类,代码还能正常工作。