概要
DQMH(Delacor Queued Message Handler),借鉴了面向对象的设计思想,通过数据队列和消息处理机制,将复杂的系统分解为多个独立的模块,每个模块通过消息队列与其他模块通信,从而实现模块间的解耦和独立开发。
本文主要结合一个相对容易理解的例子,阐述DQMH框架的工作原理,希望对于刚刚接触DQMH框架开发的初学者有所帮助。
1、从这个例子开始吧
1.1模型
Teacher&Student这个例子建立三个对象,分别是Teacher_Math、Student_A、Student_B。
事件 /对象 | Teacher_Math | Student _A | Student _B |
---|---|---|---|
Request | 选课 | / | / |
Broadcast | 点名、布置作业 | 作业进度 | 作业进度 |
Request&Wait for Reply | 答疑 | / | / |
模型运行:
- Student通过按钮事件调用Teacher的选课Request,同时会主动注册Teacher的Broadcast事件(即选课后可以获得Teacher的广播事件),并将Name发送给Teacher;
- Teacher获取Studet的Name,将其加入选课的学生名单;可以对已经选课的Student进行点名和布置作业等操作,并且可以得到Student的作业进度;
- Student在遇到作业问题时,可以调用Teacher的答疑Request(需要明确是否需要等待);
- Teacher收到答疑请求后,回答学生的问题;
模型运行界面如下:
DQMH-Teacher&Student.eg
1.2关于事件的理解
关于事件,DQMH中存在四种事件类型:(本例没有用到RoundTrip,个人理解RoundTrip是对于两个事件的组合,在相关的场景可以自由运用)
对于事件的理解:
0). Moudle:可以想象成为一个设备;
1). Request:可以想象成为设备上的一个按钮,按下按钮可以触发相关动作;
2). Broadcast:可以想象为设备上的屏幕,显示设备对外公布信息;
3). Request&Wait for Reply:可以理解为,按下按钮并提供相关信息后,可以得到对于提供信息的处理结果;在此过程中请求方可以选择是否需要等待设备的回复(若选择等待,则停止手上的工作直到产生处理结果;若选择不等待,则继续自己的工作);
4). RoundTrip(Request&Wait for Reply+Broadcast):理解为3)+ 4);
1.3模型建立过程
1)创建Module Teacher;
2)Teacher建立选课Request ;
3)Teacher建立答疑Request&WaitReply;
4)Teacher建立点名和布置作业的Broadcast;
5)创建Module Student;
6)Student建立作业进度的Broadcast;
1.4逻辑关系建立过程
1)Student 调用 Teacher 的 选课Request并传送Name,同时建立对Teacher 的Broadcast内容的订阅;
2)Student 调用 Teacher 的 答疑Request并传送Question,同时传输是否等待回复的布尔消息;
3)Teacher和Student ,在接收到对应的广播内容后,做相应的逻辑处理;
2、需要进一步思考的问题
在这个模型中,存在三个对象;实际场景中可能会建立多个老师和更多的学生,如果按照目前这种方式创建模型,会存在很多重复工作。后续更新会按照个人理解叙述一下处理方法。
小结
- 通过一个简单的模型,演示了DQMH框架的工作过程。
- 后续进一步优化。