告警程序实例(c#实现)
1. 需求
设计一个简化版的告警程序。这是一个Windows应用程序,它能够根据用户的选择结果,给出不同级别的告警消息。用户根据信号的不同,判断当前的错误警告属于何种级别。
告警程序的功能如下:
(一) 根据用户的选择触发告警信息:
(二) 告警消息根据警告的严重情况分为Lower,Medium和High三级;
(三) 不同级别的告警消息发出不同的声音;
2.通过需求识别对象
告警程序的功能非常简单。我们可以利用识别系统的关键词来寻找需要定义的对象。毋庸置疑,告警消息是整个需求分析中反复强调的,它应该是我们的关重心。需求分析中还有两个名词:用户与声音,它们是否是我们需要识别的对象的?判断的标准是这些对象是否参与了系统的功能实现,并与程序模型密切相关。
例如用户对象,它是否属于程序的一部分呢?虽然,功能需求中要求告警信号必须根据用户的选择而触发,然而,它代表的含义实际上是指用户通过交互界面,完成对告警信号的选择。因此,它仅仅属于信息交互中的一个操作者,程序并不要求用户执行相应的行为,也不需要获取用户的相关属性。如果排除某些特定的需求(例如标记接口),这种有行为与属性的对象在软件系统中是没有存在的必要的。
声音对象无疑是存在的,以为我们需要调用播放声音的方法。如果声音是一个外部文件,则准确的对象识别应该是声音播放器,通过它播放声音文件,例如wav文件。实际上,.net framwork已经定义了声音播放对象System.Media.SoundPlayer,我们只需调用其Play方法即可。
在项目中添加资源文件的方法:
在项目上右键点击-添加-新建项-选择Resouse file类型-然后选择添加声音文件即可-在项目中会出项一个Resouse文件夹,添加的声音文件将被拷贝到此文件夹下
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
现在,回过头来分析告警消息对象的属性与行为。通过需求,我们知道告警信号能够发出声音,这证实它的一种行为表现形式,我们可以将其定义为告警消息对象的方法。那么,告警消息对象是否具有特定的属性呢?从需求判断,告警消息根据警告的严重情况分为Lower,Medium和High三级,这似乎可以作为对象的一个属性,通过该属性值判断当前对象的严重级别。此外,该属性值还将制约行为的实现方式。因此告警消息对象的定义与实现如下:
namespace AlarmManager
{
class Alarm
{
private SoundPlayer m_player;//声明SoundPlayer对象
private string m_seriousLevel;//严重级别
public string SeriousLevel
{
get
{
return m_seriousLevel;
}
set
{
m_seriousLevel = value;
}
}
public Alarm()
{
m_seriousLevel = "High";
}
public Alarm(string seriousLevel)
{
m_seriousLevel = seriousLevel;
}
public void knock()
{
switch (m_seriousLevel.ToUpper())
{
case "HIGH":
m_player = new SoundPlayer(AlarmManager.Resource1.ALARM1);
//AlarmManager为声音文件的名称
break;
case "MEDIUM":
m_player = new SoundPlayer(AlarmManager.Resource1.ALARM2);
//Resource1为资源对象
break;
default:
m_player = new SoundPlayer(AlarmManager.Resource1.ALARM3);
//ALARM3为声音文件名称
break;
}
m_player.Play();
}
}
}
如果我们现在要添加一个更高级别的告警,则需要修改knock方法,在switch中添加分支,并建立一个新的实例,并不能很好的适应需求的变化。
更好的解决方法,期待大家一起解决!共同探讨
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
转载于:https://blog.51cto.com/xiaoshu838/90678