C2代码风格
1.C2体系结构风格的由来
软件体系结构设计的一个核心问题就是能否使用重复的体系结构模式,即能否达到体系结构级的软件重用。
C2 = EBI(基于事件的集成)+ LCS(分层客户端服务器)
2.C2体系结构风格的具体架构
C2是一种基于构件和消息的架构风格,可用于创建灵活的,可伸缩的软件系统。可以将架构看作是按照一定规则由连接件如消息路由设备连接的许多构件组成的层次网络系统中的构件和连接件都有一个“顶部”和“底部”;一个构件的“顶部”或“底部”可以连接到一个连接件的“底部”或“顶部”;对于一个连接件,和其相连的构件或连接件的数量没有限制,但是构件和构件之间不能直接相连。
C2架构风格图
在这种结构下,构架中构件的增加,删除,重组更为简单方便。
3. 体系结构风格中各组成元素
(1)C2构件
C2构件有自己的状态,控制线程,必须包括顶层域和底层域。
(2)通知消息和请求消息
消息通知的英文在架构风格中从上往下传递的,而请求消息的英文从下往上传递的。
(3)连接件
连接件负责把构件绑定在一起,其上可以连接任何数量的构件和连接件。连接件的主要职责是消息的路由和广播,另一个次要要职责是消息的过滤。
在C2风格中,连接器以独立实体的形式存在(许多构架风格都不具备这一特性)。
(4)域翻译器
域翻译器就是把构件所收到的请求和通知消息转换成它自己所能识别的特定形式。
4. C2基本类框架
C2风格提供一套C2风格应用程序的实现类框架,如图2这个类框架中提供了对应C2风格中构件(部件),连接器(连接器),架构(架构)的三个抽象类,并实现了构件 - 连接器,连接器 - 连接器互连的基本方法以及消息的发送,接受,和传递机制。
创建构件:开始(); addComponent(组分);
删除构件:removeComponent(组分);
增加连接器:addConnector(连接器);
删除连接器:removeConnector(连接器);
5. C2架构风格实例
(1)基于C2风格设计业务逻辑构件
系统B / S采用三层结构设计(界面层,业务逻辑层,数据访问层),业务逻辑层自动监控报警部分主要采用构件进行处理。
各个构件与系统中类的封装对应关系如表一所示:
(1)DBAI:数据库访问构件。
(2)UnitSitePrin:该构件封装了单位类Unit,监测点类Site and负责人类Principal用于提供单位,监测点和负责人信息及相应的操作。
(3)EmailSend:邮件发送构件。用于当监测到电压暂降幅值和持续时间,综合
评估指标超过预定阀值或设备发生异常时向特定负责人发送电子邮件告知系统产生的报警信息。
(4)ShortMsgSend:短消息发送构件用于当监测到电压暂降幅值和持续时间,
综合评估指标超过预定阀值或设备发生异常时向特定负责人发送手机短信告知系统产生的报警信息。
(5)报警:报警构件。用于设置系统报警信息,包括报警内容对应的报警级别,
根据此级别确定是否需要发送邮件或短消息告知给相关负责人。
(6)DevMonitor:设备监控构件用于定时地从数据库中获取设备的相应信息,
并对其状态(正常,异常,不联通等)信息进行监控,当监测到该设备状态异常时,
则向上层构件发出报警请求。
(7)SagMonitor:电压暂降监控构件。用于定时地从数据库中获取监测点的电压
暂降事件信息,当监测到电压暂降幅值和持续时间超过预定阀值或报警级别时,进行相应的报警请求。
(8)ComAssMoni:综合评估监控构件用于定时地从数据库中获取综合评估信
息,当监测到综合评估指标超过预定阀值或报警级别时,进行相应的报警请求。
(9)GetAndSetAlarm:报警查询与设置构件用于接收用户的报警信息查询和报
警信息设置请求。
(10) AlarmService:报警服务构件。用于每隔一定时间触发设备状态监控和电压暂降,综合评估监测请求。
(2)基于C2风格设计系统架构
由于C2风格的特点是下层向上层请求服务,所以系统C2架构往往是数据接口构件在最顶层,而页面请求构件在最下层。此处需要与目前流行的三层或多层架构区别开来。
以电压暂降电子邮件报警为例,说明基于C2风格的系统业务处理过程。
(1)AlarmService构件读取配置文件获取轮询时间,然后向上层构件发送电压暂降事件监控的请求消息。
(2)连接件连接器1收到该消息后,把该消息路由给连接件连接器3。
(3)连接件connector3收到消息后,继续进行路由,把消息发送给上层SagMonitor构件。
(4)SagMonitor构件收到消息后作出响应,向下层构件发送通知消息,最终由
connector3和器Connector1接件将该通知消息发送给AlarmService构件。
(5)SagMonitor构件向上层构件发送从数据库查询暂降事件记录的请求消息,连接件connector4,connectors和connector6将消息路由给DBAI构件.DBAI构件将查询的结果作为通知消息返回给SagMonitor构件。
(6)SagMonitor构件收到暂降事件记录后,则向上层构件发送消息以判断这些暂降事件是否达到电子邮件报警的级别。该请求消息由connector4连接件路由给报警构件。
(7)报警构件收到该消息后,向DBAI构件发送请求以获取用户设定电压暂降电子邮件报警的级别。然后,依此判断是否需要进行电子邮件报警。
(8)若暂降事件的幅值和持续时间超过预定的报警级别,则向EmailSend构件发送电子邮件报警的请求.EmailSend构件收到该请求消息后,向UnitSitePrin构件发送请求以获取该事件监测点负责人的电子邮件地址,UnitSitePrin构件把通过请求DBAI构件从数据库中获取到的电子邮件地址信息以通知消息的形式发送给EmailSend构件,然后EmailSend构件以这些电子邮件地址向负责人发送电子邮件告知该电压暂降报警信息。