2012-03-03 4 views
1

시작 MVC & 리포지토리에 대한 조언이 필요하십니까 & 뷰 모델, 특히 몇 가지 리포지토리 데이터 집합을 하나의 VM으로 결합합니다. 나는 자신의 (이것의 기본 성격에 대한 죄송) 저장소 요구하는 세 가지 섹션 (열)와 웹 페이지가있는 경우병합 ViewModel

은 :

UserInfoData을 - 왼쪽 COL

DiaryData에 표시 -에 표시 중동 COL

CommentData - 일

임 오른쪽 COL에 표시된 다음 -

public ActionResult Index(int id) 
{ 
    UserInfoData uid = repository.GetUserInfoData(id); 
    UserInfoDataVM UserViewModel = Mapper.Map<UserInfoData, UserInfoDataVM>(uid); 

    //RETRIEVE DiaryData & CommentData using same principle as above 

    return ?? 
} 

이 세 VM을 뷰에 반환 할 수있는 방법으로 결합하려면 어떻게해야합니까?이 세 VM을 허용하는 다른 VM을 사용합니까?

자체 데이터가있는 웹 페이지의 더 작은 세그먼트를 처리 할 때 모범 사례가 있습니까?

답변

3

내 의견으로는 사용 시나리오에 따라 다릅니다.

세 가지 하위보기 모델이 포함 된보기 모델을 만들 수는 있지만 다른 곳에서는 세 가지 하위보기 모델 중 하나를 사용하려고합니까? 그렇지 않다면 하나의 큰 뷰 모델을 사용할 수 있습니다. 그렇지 않으면 더 작은 뷰 모델을 캡슐화하는 '래퍼'뷰 모델에는 아무런 문제가 없습니다.

위에서 정의한대로 세 가지 뷰 모델을 유지할 수 있으며 뷰의 Html.RenderAction 구문을 사용하여 실제로 페이지의 각 하위 부분으로 이동하여 가져올 수 있습니다. 컨트롤러에서 각 작은 뷰 모델을 채우고 해당 모델의 뷰를 반환하는 작업을 정의한 액션을 정의했을 것입니다.

<div id="leftCol"> 
    @{Html.RenderAction("LeftCol", "Controller");} 
</div> 
<div id="midCol"> 
    @{Html.RenderAction("MiddleCol", "Controller");} 
</div> 
<div id="rightCol"> 
    @{Html.RenderAction("RightCol", "Controller");} 
</div> 

이렇게하면 사이트의 아무 곳에서나 하위 부품을 사용할 수 있으며 동작 방법과 부분보기를 한 번만 정의하면됩니다.

두 번째 옵션은 개인용 즐겨 찾기이기도합니다. JQuery를 사용하면 페이지에 부분적으로 페이지를로드하고 몇 초 내에 채우고 렌더링하면 (페이지에 맞는 경우) JQuery를 빠르게 활용할 수 있기 때문입니다. 자, 페이지가 빨리 열리고, JS 기능을 사용하여이 섹션을 가져 와서 약간의 그래픽을로드하고 AJAX 요청을 사용하여로드/렌더링됩니다. 다시 한 번 말하지만, 이것이 부분적으로 뷰/렌더링 액션 메소드를 사용하면 일반적으로 사이트 전체에서 AJAX 부분 페이지 렌더링을보다 유연하게 재사용 할 수 있습니다.

+0

감사합니다. Tommy, 많은 도움이됩니다. Html.RenderAction이 유망 해 보이고 jQuery도 좋게 보입니다. 사이트 디자인에 대해 생각하고 두 가지 기술 모두에서 좋은 플레이를 보여줄 것입니다. – LenPopLilly