.NET初学者架构设计指南(三)设计模式
一个开关,采集数据高于0的时候就是 闭合,等于0的时候就是断开;
3、推测信号:一些信号的数据从综合采集系统里面是无法得到的 ,必须通过公式计算出来。计算出来数值之后,加上一个单位显示出来。 我们可以把信号的定义存储在数据库里面,数据如下: TYPE字段表示这个信号的类型:A是模拟信号,S是状态信号,P是推测信号 。根据这个字段建立对应的信号实例,不同类型信号的数据处理就由对应的子类去负责。模拟信号会把 采集到的数据加上单位(UNIT)显示出来;状态信号会把采集到的数据根据状态描述 (STATE_DESCRIPTION)的定义显示出来;推测信号会按照推测公式(PRESUME_FORMULE)的定义去计算 信号的值,然后加上单位(UNIT)显示出来。 我们可以在设备中处理Signal子类的创建,这样也 不是不可以。但是,如果我们采用一个工厂,由他来负责Signal对象的建立,这样就完全隔离了设备和 信号的每个子类的关系。设备在调用信号对象的时候,完全不需要知道这个实例是属于哪个类型。工厂 的代码如下: class SignalFactory 如果我们需要显示设备 上的某个信号,这样就可以了:
其实,我们还可以采用一些小手段,比如利用反射 的方式,彻底的把Signal的各个子类与其他的代码隔离开,甚至连SignalFactory都不需要和子类产生联 系。我们可以把信号配置的数据修改一下: TYPE字段原先设计的是一个标志(A、S和P),现在直接记录类型的命名空间 和名称。SignalFactory在创建实例的时候,直接查出TYPE字段的内容,然后按照这个类的名称,就可以 用反射的方式创建需要的实例。这样,无论是Signal的创建者,还是调用者,都不需要知道他们创建和 调用的实际类型是哪一个,各种信号的数据和显示处理完全是由Signal的每个子类负责,程序就很好的 符合了开放闭合原则。假如以后出现了一些很独特的信号采集和计算方式,甚至不得不采用硬编码的方 式去实现,也不会对其他代码造成不良影响影响,维护起来非常的方便。 我们利用一个工厂解决 了信号数据采集的问题,并且为下一步可能发生的变化留下了扩展的可能。下面看看告警应该怎样处理 。我们先简单的考虑一下告警的形成:首先是在设备上采集到最新的实时数据,然后按照某个规则去判 断这些数据是不是符合了告警的条件。在符合条件的情况下,在设备上面产生告警。在大部分情况下, 一个告警只和一个设备有关,但是也有这样的情况:某个告警条件需要同时判断多个设备上的多个信号 。于是我们设计出下面这样的结构: 告警的定义保存在告警定义数据表里面,如下: 表里面的CONDITIONA字段表示告警条件,这是一个公式,判断的时 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |