2011-04-10 5 views
1

모델 계층 구조에 대해 연구 중이며 몇 가지 질문이 있습니다.ASP.NET MVC View Model Base?

1) 각보기 유형 (추가, 편집 및보기)에 기본 모델이 있습니다. 이것들을 각각의 뷰 타입에 특유의 것을 배치했습니다.

2) 그런 다음 위의베이스가 상속하는 모델베이스가 있습니다. 이를 통해 모든 뷰와 관련된 항목을 포함 할 수 있습니다.

3) 내 ModelBase에는 어떤 뷰에서나 소비 할 수있는 FeedbackViewModel, ShoppingCartViewModel 등의 다른 뷰 모델이 있습니다.

4) ModelBase를 상속 한 MasterPage가 있습니다.

내 모델의 기본 구조지만, 몇 가지 질문이 예

Public MustInherit Class ModelBase 
    Public Property ErrorMessage As String 
    Public Property InformationMessage As String 
    Public Property WarningMessage As String 
    Public Property FeedbackModel As New FeedbackViewModel 

End Class 

Public MustInherit Class ViewModelBase 
    Inherits ModelBase 

    'View Model Specific Stuff 
End Class 

'Allows contact us form to be submitted. 
Public Class ContactUsViewModel 
    Inherits ViewModelBase 

    Public Property Name As String 
    Public Property EmailAddress As String 
    Public Property Phone As String 
    Public Property Comments As String 

End Class 

:

나는 어떤 모델을 필요로하지 않는보기와 함께 할,하지만 난에 필요합니까 무엇

1) FeedabckViewModel, SHoppingCartViewModel 등을 전달합니까? GenricViewModel을 생각하고 있었습니까?

2)이 디자인에 결함이 있습니까?

감사합니다!

답변

2

몇 가지 포인트 :

  • ErrorMessageInformationalMessage는, WarningMessage는 등 ModelState이 충분해야 사용하고, 반대가에서 수동 스티칭을 작성하는 당신에게 검증 헬퍼 더 나은에 묶어 전망.

  • 다른보기 유형을 처리하는 "기본"모델은 약간 과잉이라고 생각합니다. 제 생각에는 enum 모드를 지정하는 것이 더 좋을 것입니다. 그러면 그에 따라 결정을 내릴 수 있습니다.

  • 전체적으로 디자인 할 때 실제로 이 잘못되었습니다.. 그것은 의견의 문제입니다. 제가보기에 보통 View마다 ViewModel을 만듭니다. 간단하게 유지합니다. 지역을 광범위하게 사용하므로 지저분하지 않습니다. 필자는 일반적으로보기를 단순하게 만들기 위해 ViewModel을 만들려고 시도합니다.보기의 코드를 다시 사용하지 않고보기를 단순하게 유지하는 것이 궁극적 인 목표입니다. 같은 문자열을 잔뜩 반대로 부분/템플릿을 사용하여 중첩 모델로 모델을 보완하는 등.

1) 나는 어떤 모델을 필요로하지 않는보기와 함께 할,하지만 난 등 FeedabckViewModel, SHoppingCartViewModel을 통과해야합니까 무엇?

그런 종류의 모순이 있습니까? :) 몇 가지 ViewModel의 "부품"이 필요하면 다른 ViewModel을 만들거나 몇 개의 필드 일 경우 ViewData에 고정하십시오.

+0

왜 'ErrorMessage','InformationMessage' 등을 사용합니까? 'Invalid Login.'과 같은 특정 속성에 바인딩되지 않은보기 (페이지)에 표시하고 싶은 메시지를 숨기려고합니다. 컨트롤러에서 ModelState.AddModelError ("Message", "Invalid Login")를 사용하고 뷰의'Message' 속성에 대해 ValidationMessage를 설정합니다. – Sam

+0

그래서 열거 형'ModelType'을 가지고 있고 각 모델에 'ModelType' 속성이 있습니까? 그리고 중첩 된 모델이 좋다는 말을하고 있습니까? 나는 그것들을 좋아해요. 그럼 당신은 강력한 형식의 모델 계층 구조를 가지고 있습니다. – Sam

+1

중첩 된 ViewModels는 관습 기반 템플릿 (예 : custom display/editortemplates -'Html.DisplayFor (model => model.NestedViewModelType)')을 사용하려는 경우 정말 좋습니다. – RPM1984

관련 문제