2009-07-18 4 views
1

아키텍처 관련 질문 : 저는 ASP.net MVC를 사용하며 View Model Classes와의 강력한 형식의 뷰에만 의존합니다. 프리젠 테이션으로ASP.net MVC의 뷰 특정 형식 지정 코드

이보기의 일이다,이 수업은 일부 필드를 포함하지 않지만 일부 서식 기능, 예를 들어,

// The ViewModel contains a List<Comment> which the view.aspx iterates 
// through, calling this function in a foreach-loop 
// PostingDateFormat and DesiredCulture are fields set by the controller, 
// and I don't know if they should be 
public string GetCommentDateLine(Comment c) 
{ 
    return c.CommentDate.ToString(this.PostingDateFormat, this.DesiredCulture); 
} 

그게 맞다면 난 그냥 궁금 경우 나에게 내가 이동해야 다른 곳? 이는 다중 뷰에서 사용되는 함수에 특히 중요합니다. 그들은 계층 외부의 특별한 계급에서 살고 있어야합니까? 또는 각 View Model 클래스에 복사/붙여 넣기 (yikes) 할 수 있습니까?

동일한 ViewModel에 여러 개의보기가있을 수도 있습니다. 브라우저에 대한 일반보기, RSS 판독기에 대한 다른보기. 일반적으로 컨트롤러는 뷰 모델에 데이터를 채워야하며보기 자체는 대상 매체 (즉, RSS 피드의 날짜는 일반 웹 사이트의 날짜와 다르게 형식이 지정됨)에 따라 데이터를 형식화해야합니다. 일반 및 RSS에 대해 별도의 ViewModel을 사용해야합니까? 아니면 컨트롤러가 RSS 필드를 원하고 "PostingDateFormat"필드에 다른 값을 채우는 지 알고 있어야합니까? 그게 더 나은 솔루션 (각보기에 대한 ViewModels을 복제 할 필요가 없음)이지만,보기에 필요한 DateFormat을 알아내는 것이 Controller의 작업인지는 확실하지 않습니다.

답변

2

모든보기 서식 논리를 HtmlHelper 확장 방법에 넣는 것이 좋습니다. 이렇게하면 뷰 모델에 형식 지정 논리가 포함되지 않고 단순히 수행 할 작업을 수행하게됩니다. 컨트롤러에서 개체를 뷰로 가져옵니다.

그래서 귀하의 경우에, 나는 당신이 좋아하는 어떤 것을 만들 거라고 추측에는 요 :
namespace System.Web.Mvc 
{ 
    public static class HtmlExtensions 
    { 
     public static string CommentDateLine(this HtmlHelper html, 
              Comment comment, 
              string format, 
              IFormatProvider formatProvider) 
     { 
      return comment.CommentDate.ToString(format, formatProvider); 
     } 
    } 
} 

는 PostingDateFormat 문제에 관해서는, 당신이 암시처럼, 나는 definatly 각 뷰에 대해 별도의 ViewModels를 작성하지 않을 것입니다. RSS 날짜 형식에 대한 별도의 확장 방법을 만들 수 있습니다 (ViewModel에 설정된 PostingDateFormat의 필요성을 배제 할 수 있습니다).

HTHs,
찰스

+0

그냥이에 추가 : 나는 중앙 설정 클래스를 통해 Web.config의 액세스를에 실제 형식 공급자 및 날짜 형식을 넣었습니다. 그렇게하면 HTML 도우미가 실제로 만 서식을 지정하지만 실제 서식은 걱정하지 않습니다. http://www.stum.de/2009/12/28/having-a-nested-configuration-section-in-web-config/ –

관련 문제