快速业务通道

.NET初学者架构设计指南(三)设计模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
一个开关,采集数据高于0的时候就是 闭合,等于0的时候就是断开;

3、推测信号:一些信号的数据从综合采集系统里面是无法得到的 ,必须通过公式计算出来。计算出来数值之后,加上一个单位显示出来。

.NET初学者架构设计指南(三)设计模式

我们可以把信号的定义存储在数据库里面,数据如下:

.NET初学者架构设计指南(三)设计模式

TYPE字段表示这个信号的类型:A是模拟信号,S是状态信号,P是推测信号 。根据这个字段建立对应的信号实例,不同类型信号的数据处理就由对应的子类去负责。模拟信号会把 采集到的数据加上单位(UNIT)显示出来;状态信号会把采集到的数据根据状态描述 (STATE_DESCRIPTION)的定义显示出来;推测信号会按照推测公式(PRESUME_FORMULE)的定义去计算 信号的值,然后加上单位(UNIT)显示出来。

我们可以在设备中处理Signal子类的创建,这样也 不是不可以。但是,如果我们采用一个工厂,由他来负责Signal对象的建立,这样就完全隔离了设备和 信号的每个子类的关系。设备在调用信号对象的时候,完全不需要知道这个实例是属于哪个类型。工厂 的代码如下:

class SignalFactory
{
public static Signal CreateSignal(string dev, string sig)
{
//获取信号的定义
string sql =
"SELECT * FROM SIG WHERE DEV=''" + dev + "'' AND SIG=''" + sig + "''";
//查数据库表
//判断需要创建的类型
Signal signal = null;
if (type == ''A'')
{
signal = new AnalogSignal();
}
else if (type == ''S'')
{
signal = new StateSignal();
}
else if (type == ''P'')
{
signal = new PresumeSignal();
}
else
{
return null;
}
//设置Signal的配置参数
signal.SetUnit(unit);
signal.SetStateDescription(state_description);
signal.SetPresumeFormule(presume_formule)
return signal;
}
}

如果我们需要显示设备 上的某个信号,这样就可以了:

Signal sig = SignalFactory.CreateSignal(dev, sig);
string s = sig.GetDisplayString();

其实,我们还可以采用一些小手段,比如利用反射 的方式,彻底的把Signal的各个子类与其他的代码隔离开,甚至连SignalFactory都不需要和子类产生联 系。我们可以把信号配置的数据修改一下:

.NET初学者架构设计指南(三)设计模式

TYPE字段原先设计的是一个标志(A、S和P),现在直接记录类型的命名空间 和名称。SignalFactory在创建实例的时候,直接查出TYPE字段的内容,然后按照这个类的名称,就可以 用反射的方式创建需要的实例。这样,无论是Signal的创建者,还是调用者,都不需要知道他们创建和 调用的实际类型是哪一个,各种信号的数据和显示处理完全是由Signal的每个子类负责,程序就很好的 符合了开放闭合原则。假如以后出现了一些很独特的信号采集和计算方式,甚至不得不采用硬编码的方 式去实现,也不会对其他代码造成不良影响影响,维护起来非常的方便。

我们利用一个工厂解决 了信号数据采集的问题,并且为下一步可能发生的变化留下了扩展的可能。下面看看告警应该怎样处理 。我们先简单的考虑一下告警的形成:首先是在设备上采集到最新的实时数据,然后按照某个规则去判 断这些数据是不是符合了告警的条件。在符合条件的情况下,在设备上面产生告警。在大部分情况下, 一个告警只和一个设备有关,但是也有这样的情况:某个告警条件需要同时判断多个设备上的多个信号 。于是我们设计出下面这样的结构:

.NET初学者架构设计指南(三)设计模式

告警的定义保存在告警定义数据表里面,如下:

.NET初学者架构设计指南(三)设计模式

表里面的CONDITIONA字段表示告警条件,这是一个公式,判断的时

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号