WM有約II(六):分級限制

作者: Allen Lee  來源: 博客園  發布時間: 2009-04-28 14:57  閱讀: 2793 次  推薦: 0   原文鏈接   [收藏]  
 

等級制度

  在上一集里,我們把發送查詢短信息的人分為"聯系人"和"陌生人"兩大類,應用程序會自動回復"聯系人",忽略"陌生人",在這一集里,我們將會引入另外兩種類型:"白名單"和"黑名單"。如果你看過上一集,你應該知道"聯系人"和"陌生人"是互斥的,它們之間的區別是手機號碼是否存在聯系人里。"白名單"和"黑名單"是在"聯系人"上發展出來的兩個細分類型,它們也是互斥的,"白名單"允許執行所有查詢,而"黑名單"則禁止執行所有查詢。至于"陌生人",我們將會給它一個"注冊"的機會,讓它可以請求把自己加到聯系人里。這四個等級將會通過AccessLevel枚舉來表達:

代碼 1

  在這一集里,我們將會在這個"等級制度"的基礎上實現如下效果:

訪問級別

允許執行的操作

Whitelist

PingStatus、PingSchedule

Contact

PingStatus

Stranger

SignUp

Blacklist

N/A

 

白名單 & 黑名單

  因為白名單和黑名單本質上只是兩組姓名,所以我們選擇最簡單的文本文件來存儲,每行一條記錄。白名單和黑名單的管理分別由WhitelistManager和BlacklistManager來負責:

圖 1

而讀/寫文本文件的任務則交給ReadAllLines和WriteAllLines兩個方法:

代碼 2

  因為白名單和黑名單是互斥的,所以當我們向任一名單添加一個姓名時,必須確保該姓名不會出現在另一個名單里,比如說,當我們向白名單添加一個姓名時,如果該姓名已包含在黑名單里,則應先從黑名單刪除該姓名,由于我們使用了BindingList,于是檢查工作可以在ListChanged事件觸發時展開:

代碼 3

  接著,我們需要兩個窗體來編輯白名單和黑名單:

圖 2

  是不是覺得這兩個窗體很眼熟?事實上,它們仿照了Status Texts Editor(參見《WM有約II(二):持續改進》的圖1)的做法,所以這里就不詳述了。

  最后,我們需要在主窗體放置兩個菜單項,以便打開Whitelist Editor和Blacklist Editor:

圖 3

  現在,我們來看看運行效果,一開始,白名單和黑名單都是空的,我們打開Whitelist Editor,單擊Add按鈕:

圖 4

  單擊TextBox右邊的"..."按鈕,ChooseContactDialog對話框將會打開:

圖 5

  選中一個聯系人,ChooseContactDialog對話框將會關閉,選中的聯系人的姓名將會出現在Whitelist Editor下面的TextBox里:

圖 6

  單擊OK把該姓名添加到白名單里,重復上面步驟添加另一個聯系人:

圖 7

  單擊Whitelist Editor右上角的OK按鈕關閉窗體并保存白名單。接著,打開Blacklist Editor,參照上面的步驟把Allen Lee添加到黑名單:

圖 8

  由于白名單和黑名單是互斥的,此時白名單應該沒有Allen Lee了,打開Whitelist Editor驗證一下:

圖 9

0
0
 
標簽:Mobile
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()