2014-12-28 5 views
0

다른 사람의 코드를 알아 내려고하고 있습니다. 사용자가 사용자 이름과 암호를 가져오고 데이터베이스 테이블에서 사용자 이름과 암호가 올바른지 확인합니다. 자신의 데이터 영역은 다음과 같습니다엔티티 프레임 워크 단계 문제

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 인터페이스 : 정말 새로운 (그는이 컨트롤러 생성자 (SER = 새로운 UserService에 무슨 짓을했는지 이해할 수 없다

 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(); 
     } 

:

public interface IUserService 
    { 
     bool Authenticate(string user, string pwd); 
    } 

그리고 MVC 컨트롤러는 다음과 같습니다 UserRepository()))하지만 코드는 완벽하게 작동합니다. 그가 무엇을하려하며,이 컨트롤러를 DataLayer (UserRepository 클래스)에 연결하려고합니까?

감사합니다.

답변

1

홈 컨트롤러에는 사용자 이름과 암호가있는 사용자 모델을 허용하는 로그인 동작 방법이 있습니다.

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); 

...는 DB에서 해당 사용자 이름으로 사용자를 발견하면

User u = con.Users.Find(user); 

, 그것은 반환에게 사용자 이름과 암호를 사용하여 사용자 개체를 확인합니다.

 if (u != null) 
     { 
      User.Username = u.UserName; 
      User.Password = u.Password;    
     } 
     return User; 

인증 용 방법 검사의 나머지 부분이 객체 인 UserDTO의 암호는 로그인의 조치 방법에 공급되는 초기 암호와 일치, true 또는 그에 따라 false를 반환하는 경우.

 if (u.Username == user && u.Password == pwd) 
      return true; 
     else 
      return false; 
+0

예 .. 왜이 코드를 생성자에 넣었는지 설명해 주시겠습니까? ... ser = new UserService (new UserRepository()); – Dayan

+0

그는이 컨트롤러를 DataLayer (UserRepository 클래스)에 연결하려고합니까? – Dayan

+0

@Dayan - Controller를 인스턴스화 할 때 UserService 객체를 만들고 싶었습니다. 네, 데이터 레이어에 연결하는 방법입니다. UserRepository는 사용자에게 CRUD 작업을 수행하지만 UserService는 비즈니스 논리 또는 인증과 같은 다른 작업을 처리합니다. UserRepo가 컨트롤러에 의해 UserService의 생성자로 전달되는 이유는 잘 모르겠습니다. – KDilawar