sage.Text = "用户名或密码不正确 !";
break;
case "UserNotFound":
Message.Text = "该用户不存在!";
break;
}
}
我这里为登录结果的不同通知作出相应的处理。接下来看一下点击了登录按钮后LoginCommand在做些什么事情
Code
public override void execute(INotification notification)
{
base.execute(notification);
//获得用户登录的信息
LoginVO loginVO = (LoginVO)notification.getBody();
//获得需要使用到的Proxy
UserProxy userProxy = facade.retrieveProxy(UserProxy.NAME) as UserProxy;
//通过用户名返回用户的信息
UserInfo userInfo = userProxy.GetUserInfo(loginVO.UserName);
//实现用户的登录逻辑
if (userInfo != null)
{
if (userInfo.Password == loginVO.Password)
{
//发出登录情况的通知
sendNotification(LOGIN_SUCCESS, userInfo);
}
else
{
sendNotification(LOGIN_FAILED);
}
}
else
{
sendNotification(USER_NOT_FOUND);
}
}
在LoginCommand里,使用facade(父类的一个Facade对象)调用retrieveProxy方法取得对应名字的Proxy对象,然后调用Proxy对象的方法来获取需要的数据。下面是Proxy的GetUserInfo方法:
Code
/// <summary>
/// 从数据库中读取用户信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public UserInfo GetUserInfo(string userName)
{
UserInfoTableAdapter adapter = new UserInfoTableAdapter();
MyDataSet.UserInfoDataTable dataTable = adapter.GetUserByUserName(userName);
UserInfo userInfo = null;
if (dataTable.Rows.Count > 0)
{
userInfo = new UserInfo();
MyDataSet.UserInfoRow row = dataTable[0];
userInfo.UserId = row.UserId;
userInfo.UserName = row.UserName;
userInfo.Password = row.Password;
userInfo.Email = row.Email;
}
return userInfo;
}
到此,整个Demo的实现就完成了。这些注册,发出通知等等绕来绕去的执行可能一下子很难理清整个过程的思路,其实本人就花了不少的时间才大概的能理清这些复杂的关系(其实它们的耦合度是很低的,但是脑子就是反应不过来)。下面提供这个Demo的源码,这可是网上绝无仅有的PureMVC-C#的Demo哦,喜欢的朋友就下吧,希望大家多多支持本人的博客。真的骄傲在今后的时间里,还会陆续推出一系列的文章和Demo,向各位读者学习和交流。
本文配套源码 |