2017-09-11 17 views
0

저는 계정 모델을위한 Account 클래스를 가지고 있습니다.asp.net core mvc에서 Model과 ViewModel의 차이점은 무엇입니까?

public class Account 
{ 
    [Key] 
    public Int64 UID { get; set; } 

    [Required] 
    public string ID { get; set; } 

    [Required] 
    public string PassWord { get; set; } 
    [Required] 
    public string UserName { get; set; } 

} 

내 프로젝트는 코드 첫 번째 프로젝트가 아니며 데이터베이스 '계정'의 모델 클래스입니다.

하지만 로그인보기, 문자열 ID 및 문자열 PassWord에서 두 가지 속성 만 사용합니다. 내가 두 속성을 사용하기 때문에 모델의 유효성을 검사 할 때 그래서 나는

그래서 내가 그 다음에 대해 검색, 지금은 '뷰 모델'에 대한 발견 ... 로그인 컨트롤러 ModelState.Isvalid()를 사용할 수 없습니다 뷰의 모델 클래스입니다.

그런 다음 'AccountViewModel'이라는 새 클래스를 만든 다음 'Account'모델 대신보기로 매핑했습니다.

내 길은 맞았습니까? ViewModel은 View 용 모델 클래스라는 것을 이해했습니다. 그리고 모델 클래스는 모두를위한 것입니다. (DB, 뷰 등등을위한 전역적인 의미 ...?)

Model과 ViewModel 클래스의 차이점은 무엇입니까? 이 문제를 해결할 수있는 좋은 방법이 있습니까?

+0

고마워요. 하지만 모델에 대해 더 궁금한 점이 있습니다. ViewModel은보기 용이고 Model은 DB 컨텍스트 용임을 이해했습니다. 그렇다면 실제 MSSQL DB Table 열과 [Key] 또는 [Required]와 같은 주석을 설정해야합니까? – HelloWorld

답변

2

이름에서 알 수 있듯이보기 모델은보기에 매우 고유합니다.보기에 필요한 속성 만있는 간단한 POCO가됩니다.

다른 모델 클래스는 엔티티 모델입니다. 따라서 EF 코드 첫 번째 방법을 사용하는 경우 EF에서 데이터베이스 테이블을 생성하는 엔터티 클래스 정의가 필요합니다. 그래서 기본적으로 이러한 엔티티 클래스는 db 스키마 구조와 매우 유사하게 보입니다.

뷰 모델을 생성하면 엔티티 클래스가 UI 레이어에 강한 결합이 제거되어 이됩니다. 이제 UI 레이어는 엔티티 클래스와 관계가 없으므로 데이터 액세스 코드를 EF에서 다른 것으로 변경하기로 결정한 경우보기를 전혀 터치 할 필요가 없습니다. 매핑 부분을 업데이트하면됩니다 모델을 데이터 액세스/서비스 계층 엔티티에 매핑)

보기 모델은 종종 엔티티 모델이 간단한 테이블/클래스 인 경우 특히 엔티티 모델과 매우 유사하게 보입니다.

보기가 사용자 ID와 암호를 전달하므로보기 속성이 2 개인 단순한보기 모델이 필요합니다. 사용자가 양식을 제출하면 값을 읽고이를 사용하여 필요에 따라 도메인 엔티티 클래스 객체를 작성할 수 있습니다.

public class LoginViewModel 
{ 
    public string UserId { set;get;} 
    public string Password { set;get; } 
} 

뷰 모델에 데이터 주석을 사용할 수 있습니다. MVC 모델 유효성 검사 프레임 워크는 이러한 데이터 주석을 통해 유효성 검사를 수행합니다. 예를 들어 사용자가 UserId와 Password를 입력해야하므로 적절한 주석으로 꾸밀 수 있습니다.

public class LoginViewModel 
{ 
    [Required] 
    public string UserId { set;get;} 

    [Required] 
    public string Password { set;get; } 
} 

[Key] 속성은 엔티티 클래스를 정의 할 때 더 유용합니다. 그래서 그것은 뷰 모델에 필요하다고 생각하지 않습니다. 보기 모델은 UI와 더 흡사합니다. 기본 데이터 저장 메커니즘에 대해 전혀 알지 못합니다.

보기 모델 속성에 가장 많이 사용되는 속성 중 일부는

  1. Required
  2. MinLength
  3. Range
  4. Url
  5. Phone
  6. StringLength
  7. 있습니다
  8. DataType