代码改变世界

有关软件系统设计中通信协议的封装和使用建议

2026-04-23 08:01  ahuige  阅读(14)  评论(0)    收藏  举报

— 从领域(模型)驱动的设计观点

通信协议的重要性:

划分系统模块的重要来源;

严重制约着系统业务逻辑;

通信协议的封装建议:

认真对待每一条报文,每一个结构体,他们各自至少值得形成一个类;

为发送报文抽象一些恰当的set API;如何“恰当”?除了协议本身结构外,主要由领域的核心概念确定;例如从业务领域出发考虑,这几个字段、状态是否一定同时更新,是的话就可以设计为统一API;否则则要建立各自的更新入口;

为发送报文建立一个初始化API,主要实现如当前报文头的设置;当然,具体参数内容应该由调用模块调用设置;

针对接收报文,主要注意的是把诸如量纲、字节序等与领域概念无关的信息在相应的接收API中统筹考虑;

通信协议的使用建议:

为建立系统核心-业务模块与各协议类交互数据的桥梁,例如考虑需要将不同模块(业务/公共/UI)产生的业务数据发送某个设备或某些设备时,可以建立一个封装了上述所有协议类所提供的主要API的公共协议类;进一步:该公共协议类中相关的set API 中所需的输入参数类型,如枚举、结构体应全部使用业务模块中的定义;而在该set API 中实现上述数据类型及内容到各设备协议类的转换、整合工作;

而上述公共协议类与业务模块的沟通则通过建立一个协议处理类;其专门负责进行协议解析、业务和UI模块的数据处理;

收益:

上述设计建立在更好的对领域理解的基础上;反过来也可以加深对领域的理解,以期建立和实现更好的领域模型;

由于将协议的定义、处理细节进行了再次的封装,软件核心(业务模块)、UI,公共模块都将更好的处理其份内之事;