C2代码风格

news/2025/1/15 8:16:57/

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构件以这些电子邮件地址向负责人发送电子邮件告知该电压暂降报警信息。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/886382.html

相关文章

C2的完整形式是什么?

C2:核心2 (C2: Core 2) C2 is an abbreviation of "Core 2" or "Intel Core 2". C2是“ Core 2”或“ Intel Core 2”的缩写 。 It is a family of Intels processor which was launched on the 27th of July, 2006. It comprises a series of…

HOT65-在排序数组中查找元素的第一个和最后一个位置

leetcode原题链接:HOT65-在排序数组中查找元素的第一个和最后一个位置 题目描述 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 […

远程CentOs安装了MySQL,本地的Nvaicat/SqlYog无法正常连接?

#1、创建新用户 mysql> CREATE USER ‘username’‘%’ IDENTIFIED BY ‘userpassword’; #给普通用户远程连接的权限: #2、授权 myuser 用户对指定库的所有表,所有权限并设置远程访问 mysql> GRANT ALL ON 指定库.* TO ‘username’‘%’; #3、更…

redis实现 如果一个外卖配送单子要发布,现在有200个骑手都想要接这一单,如何保证只有一个骑手接到单子?

redis实现 在Spring Boot中使用Redis实现外卖配送单发布并保证只有一个骑手接单,可以通过以下步骤实现: 确保你的Spring Boot项目已经集成了Redis,并正确配置了Redis连接信息。 在发布外卖配送单时,生成一个唯一的标识符&#x…

什么蓝牙耳机适合外卖骑手用?骑行抗风噪最好的蓝牙耳机推荐

耳机作为日常出行的随身物品。它的用途可是非常的广。而现在的耳机更新换代也越来越快。各种各样的耳机如雨后春笋冒了出来。但是并不是所有的耳机功能配置都是完美的,比如在通话等方面,有些耳机就存在很大的缺陷。于是作者为了给大家提供更多关于通话耳…

外卖骑手的困局,算法不背这个锅 | Alfred数据室

《人物》杂志发表了《外卖骑手,困在系统里》一文,文中从外卖骑手的视角出发,探究了目前外卖生态中外卖骑手送餐只能越来越快、越来越不顾自身安全的困局,引起大家对于外卖平台以及其所设计出来的算法的批判,并且在引言…

当“信用配送”来敲门,达达、美团配送、蜂鸟即配怎么玩?

文|陈小江 来源 | 螳螂财经(ID:TanglangFin) 天下武功,唯快不破,似乎是不变的真理。 近几年,即时配送成为快递细分行业增长最快的领域,“快”当记首功。 除“快”之外,在疫情倒逼下&#xf…

【黄啊码】微信小程序外卖项目显示骑手位置

小demo,不太建议完全照抄,需要的可以在上边完成拓展,不喜勿喷!!! 这个功能最重要的就是路线规划,路线两端分别是点外卖的人,商家,送外卖的骑手,商家的位置&a…