告警程序實例(c#實現)
1. 需求
設計一個簡化版的告警程序。這是一個Windows應用程序,它能夠根據用戶的選擇結果,給出不同級別的告警消息。用戶根據信號的不同,判斷當前的錯誤警告屬於何種級別。
告警程序的功能如下:
(一) 根據用戶的選擇觸發告警信息:
(二) 告警消息根據警告的嚴重情況分爲Lower,Medium和High三級;
(三) 不同級別的告警消息發出不同的聲音;
2.通過需求識別對象
告警程序的功能非常簡單。我們可以利用識別系統的關鍵詞來尋找需要定義的對象。毋庸置疑,告警消息是整個需求分析中反覆強調的,它應該是我們的關重心。需求分析中還有兩個名詞:用戶與聲音,它們是否是我們需要識別的對象的?判斷的標準是這些對象是否參與了系統的功能實現,並與程序模型密切相關。
例如用戶對象,它是否屬於程序的一部分呢?雖然,功能需求中要求告警信號必須根據用戶的選擇而觸發,然而,它代表的含義實際上是指用戶通過交互界面,完成對告警信號的選擇。因此,它僅僅屬於信息交互中的一個操作者,程序並不要求用戶執行相應的行爲,也不需要獲取用戶的相關屬性。如果排除某些特定的需求(例如標記接口),這種有行爲與屬性的對象在軟件系統中是沒有存在的必要的。
聲音對象無疑是存在的,以爲我們需要調用播放聲音的方法。如果聲音是一個外部文件,則準確的對象識別應該是聲音播放器,通過它播放聲音文件,例如wav文件。實際上,.net framwork已經定義了聲音播放對象System.Media.SoundPlayer,我們只需調用其Play方法即可。
在項目中添加資源文件的方法:
在項目上右鍵點擊-添加-新建項-選擇Resouse file類型-然後選擇添加聲音文件即可-在項目中會出項一個Resouse文件夾,添加的聲音文件將被拷貝到此文件夾下
現在,回過頭來分析告警消息對象的屬性與行爲。通過需求,我們知道告警信號能夠發出聲音,這證實它的一種行爲表現形式,我們可以將其定義爲告警消息對象的方法。那麼,告警消息對象是否具有特定的屬性呢?從需求判斷,告警消息根據警告的嚴重情況分爲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中添加分支,並建立一個新的實例,並不能很好的適應需求的變化。
更好的解決方法,期待大家一起解決!共同探討