先來(lái)做第一步,將動(dòng)作和狀態(tài)抽象出來(lái),程序的狀態(tài)應(yīng)該包括:
1.程序狀態(tài):運(yùn)行狀態(tài)和未運(yùn)行狀態(tài)。
2.用戶類(lèi)型:管理員和授權(quán)用戶。
3.密碼:正確的密碼和錯(cuò)誤的密碼。
4.登錄狀態(tài):成功登錄和登錄失敗。
動(dòng)作應(yīng)該包括:
1.登錄:即用戶在界面上輸入用戶名和密碼。
2.注銷(xiāo)。
第二步,編寫(xiě)C#?程序建模。
狀態(tài)已經(jīng)抽象出來(lái)了,在NModel里面,抽象出來(lái)的狀態(tài)一般是用枚舉值表示的。
MILY: 'Courier New'">public enum ModeState { Initializing, Running }
public enum User { Authenticated, Administrator }
public enum Password { Correct, Incorrect }
public enum LoginStatus { Success, Failure }
接下來(lái)模擬動(dòng)作:
[Feature("Login")]
public static class Login
{
public static Map
[Requirement("Send username and password to the server to log in.")]
[Action]
public static void Login_Start(User user, Password password)
{
if (password == Password.Correct)
ActiveLoginRequests = ActiveLoginRequests.Add(user, LoginStatus.Success);
else
ActiveLoginRequests = ActiveLoginRequests.Add(user, LoginStatus.Failure);
}
public static bool Login_StartEnabled()
{
return WebSiteModel.State == ModeState.Running;
}
public static bool Login_StartEnabled(User user)
{
return !ActiveLoginRequests.ContainsKey(user) &&
!WebSiteModel.UsersLoggedIn.Contains(user);
}
[Requirement("It should be possible to log out from any page")]
[Action]
public static void Logout(User user)
{
WebSiteModel.UsersLoggedIn = WebSiteModel.UsersLoggedIn.Remove(user);
}
public static bool LogoutEnabled()
{
return WebSiteModel.State == ModeState.Running;
}
public static bool LogoutEnabled(User user)
{
return WebSiteModel.UsersLoggedIn.Contains(user);
}
}
上面的代碼稍微解釋一下,標(biāo)注了[Action]的函數(shù),就是抽象出來(lái)的程序所支持的動(dòng)作,例如Logout;而在動(dòng)作函數(shù)名后面加上Enabled的函數(shù),是NModel用來(lái)判定指定的動(dòng)作是否可以執(zhí)行,例如LogoutEnabled函數(shù)。
相關(guān)推薦:2010年下半年軟考成績(jī)查詢(xún)時(shí)間及方式匯總
2011年上半年計(jì)算機(jī)軟考時(shí)間及科目安排
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |