我正在试图找出别人的代码.... 这样做是从用户那里获取用户名和密码,并从数据库表中检查用户名和密码是否正确.... 他的DataLayer看起来像这样:
public class UserRepository : IUser
{
Context con = new Context();
public UserDTO GetUser(string user)
{
User u = con.Users.Find(user);
UserDTO User = new UserDTO();
if (u != null)
{
User.Username = u.UserName;
User.Password = u.Password;
}
return User;
}
}
IUser界面:
public interface IUser
{
UserDTO GetUser(string user);
}
ServiceLayer看起来像这样:
public class UserService : IUserService
{
IUser data;
public UserService(IUser data)
{
this.data = data;
}
public bool Authenticate(string user,string pwd)
{
UserDTO u = data.GetUser(user);
if (u.Username == user && u.Password == pwd)
return true;
else
return false;
}
}
IuserService接口:
public interface IUserService
{
bool Authenticate(string user, string pwd);
}
MVC控制器看起来像这样:
public class HomeController : Controller
{
public ActionResult Log()
{
return View();
}
IUserService ser;
public HomeController()
{
ser = new UserService(new UserRepository());
}
public ActionResult Login(Models.User user)
{
if (ser.Authenticate(user.UserName, user.Password))
{
ViewBag.Message = "Success";
}
else
ViewBag.Message = "UnSuccess";
return View();
}
我无法真正理解他在这个Controller构造函数中做了什么(ser = new UserService(new UserRepository()))但代码运行完美.... 他想做什么,是他试图将这个控制器连接到DataLayer(UserRepository类)?
谢谢!!!
答案 0 :(得分:1)
家庭控制器有一个Login Action方法,它接受一个用户模型,该模型有一个用户名和密码。
public ActionResult Login(Models.User user)
操作方法使用用户服务尝试验证用户的密码。 控制器调用UserService的Authenticate方法,该方法接收提供的用户名和密码。
if (ser.Authenticate(user.UserName, user.Password))
该服务调用UserRepositories GetUser方法,该方法尝试按用户名查找用户。
public bool Authenticate(string user,string pwd)
{
UserDTO u = data.GetUser(user);
...
User u = con.Users.Find(user);
如果它在db中找到该用户名的用户,则检查用户名和密码返回用户对象。
if (u != null)
{
User.Username = u.UserName;
User.Password = u.Password;
}
return User;
authenticate方法的其余部分检查此UserDTO的密码是否与提供给Login Action方法的初始密码匹配,并根据该密码返回true或false。
if (u.Username == user && u.Password == pwd)
return true;
else
return false;