代码简洁之道(二)

数据、对象的反对称性

  • 数据结构、对象或者说具体、抽象的本质区别在于是否暴露数据细节。
  • 过程式代码便于添加新函数,不便于添加新数据结构。对象式代码便于添加新类,不便于添加新函数

错误处理

  • 封装第三方类同时封装其catch异常
  • 不要返回、传递null

边界

  • 慎用类似map等可以使用泛型的接口 ap sensors = new HashMap(); Sensor s = sensors.get(sensorId ); 建议替换为 public class Sensors { private Map sensors = new HashMap(); public Sensor getById(String id) { return (Sensor) sensors.get(id); } //snip }
  • 学习性测试,通过测试驱动了解第三方库
  • 为尚未开发的代码预留接口,如适配器模式

单元测试

  • 只编写刚好失败的单元测试
  • 整洁
  • 一个测试一个概念

系统

没看懂

迭进

  • 运行所有测试
  • 不可重复。可以用模板类消除明显的重复
  • 注意代码的表达力
  • 使用恰当数量的类和方法

并发编程

  • 单一权责,分离不需要并发的代码
  • 限制数据作用域,严格限制共享数据的访问
  • 使用数据副本
  • 线程尽可能独立
  • 多了解并发类
  • 了解并发的执行模式:限定资源,互斥,线程饥饿,死锁,活锁
  • 常用基础算法–生产者、消费者;读者、作者;宴席哲学家
  • 避免使用一个共享对象的多个方法,可以:基于客户端锁定,基于服务端锁定,适配服务端
  • 尽可能缩小同步区
  • 尽早考虑关闭系统的问题,因为有各种可能会死锁
  • 编写可插拔,可调整的线程代码,运行多于处理器数量的线程,在不同平台上运行,强迫错误发生。在不同的编程配置,系统配置,负载下频繁运行。
  • java中装置试错代码 没看懂
原文地址:https://www.cnblogs.com/lijianming180/p/12255813.html