编程随想
多模块交互模式思考
三种模式
- 网络模式
- 每个模块都是同等地位,交互式是直接和其他模块交互。模块内封装发送操作和接受处理,并且配置信息发送的路由。
- 优势:与其他模块直接交互,效率高。
- 劣势:多模块交互时,消息不好管理。不容易理清关系。
- 适用场景:模块较少,模块相互独立,模块交互简单。
- 放射模式
- 有一个转发模块,其他模块都与这个模块交互。所有的消息发送都在转发模块中配置。其他模块内只封装发送操作和接受处理。
- 优势:从装法模块可以清晰看出模块间交互,方便管理。
- 劣势:经过转发模块,降低效率。
- 适用场景:模块较多,模块相互独立,模块交互复杂。
- 包含模式
- 模块保存交互模块引用,直接通过调用交互模块的共有接口实现交互。
- 优势:直接,高效,没用冗余功能
- 劣势:高度依赖;多模块交互时,逻辑复杂;会引起重复包含
- 适用场景:模块间存在明显的依赖关系和上下级关系。
模式组合
- 包含模式+放射模式
- 场景:多个输入输出模块和多个处理模块,输入输出模块和处理模块关系复杂。
- 形式:输入输出模块和处理模块间,以及输入输出模块之间采用放射模式。处理模块之间使用包含模式,如果处理模块比较多,交互复杂,可替换为网络模式。
- 包含模式+网络模式
- 场景:少数的输入输出模块和少数当规模较大的处理模块
- 形式:处理模块精心细分上下级关系,并通过包含模式精心交互。处理模块与输入输出模块模块使用网络模式。
模块分类
数据中心
内存数据。从界面中提取出来的数据,由后台服务处理修改后通知界面更新。
IO模块
提供输入输出模块,包括界面,文件,网络,数据库等。
服务模块
处理业务逻辑。
纯虚类(接口)和继承类
纯虚类
纯虚类适用于提供接口,基类实现简单,只有接口定义。子类除了实现基类接口,可能还有其他业务接口。子类本身提供主要服务,通过接口可以提供部分专业服务。
- 提供全服务:子类
- 特点:可以提供部分服务
- 缺点:全服务的灵活性差
继承类
继承类适用于实现接口。基类的接口涵盖子类的所有接口,子类仅仅实现基类中未实现的接口。以子类创建,但使用的时候基本上是通过基类提供服务。
- 提供全服务:基类
- 特点:全服务的部分服务可以提供不一样的实现
- 缺点:基类接口庞大,容易制造超级大类
衍生组合
组合对接口和继承类的结合,适用于子类(这个更时候称之为承载类,并没有继承关系,下同)中未实现的接口与子类本身定位不是必要的,可通过组合实现。具体是创建一个新纯虚类,其中包括子类的未实现接口。子类创建纯虚类的引用。子类通过调用纯虚类的接口来实现未实现的接口,而纯虚类的接口则通过其继承类来实现。
- 提供全服务:子类(承载类)
- 特点:全服务的部分服务可以提供不一样的实现,可以提供部分服务
- 缺点:弱化接口与子类的关系(对于耦合性来说可能是好事,但是涉及到业务的话,如果是接口是子类的必要接口,就不应该弱化这种依赖关系)