前一段时间,尝试过总结中间件的写法,奈何见识太少,总是不能清晰的抽象出来。后来偶然间看到梁飞大佬的博客,读来有醍醐灌顶之感,大佬在九年前就总结出来一套模型了和一些常见的写法示例,非常清晰。
在这里放一些大佬的博客链接:
一些设计上的基本常识:一些设计上的基本常识。
大佬的 核心域、服务域、会话域的划分,和我前一篇博客想表达的一样,只不过我没总结好,不够清晰。
api 和 spi 分离,中间件会有使用者和扩展者,二者的职能不同,对外接口也不应该耦合。
重要状态的变更发送事件,和干预过程的拦截器不同, 主要是采用 Callback 接口,进行事后通知。
不要控制外部对象的生命周期,即不要在内部反射或者 newInstance()创建实例,主要是让使用者或者扩展者上报,比如 通过 spi 上报或者通过 spring 获取指定类型的 bean,例如数据库的 datasource。
配置设计:配置设计。
环境配置、描述配置、扩展配置,三种分类非常经典,借助大佬的思想,我写了一篇 seata 的配置相关分析,我认为是 seata 源码分析系列中,我写的最好的一篇了。
魔鬼在细节中:魔鬼在细节中。
大佬列举了许多种,开发者容易踩的坑,比如空指针、下标越界,分离可靠操作和不可靠操作,防御不可靠操作可能产生的异常,降低修改时的误解,等等,都是经验不足的人经常犯的错。
虽然平常工作中很少用到 dubbo,但是一直看 dubbo,因为设计的非常精妙,尤其是 spi 和 url,非常有美感。