2013-02-19 2 views
0

세부 정보보기에 표시 할 개체가 있습니다. 객체에는보기에 필요한 여러 속성이 있습니다.viewModels를 올바르게 사용하고 있습니까? (MVC4)?

개체에는 부모님과 조부모가 있는데보기에 표시해야합니다. 내 객체의 ViewModel을 위해 무엇을 가지고

은 다음과 같습니다

public class ObjectViewModel 
{ 
    // Used when creating a new object under a parent object 
    [HiddenInput(DisplayValue = false)] 
    public int? ParentObjectId { get; set; } 

    [Required] 
    public Object Object { get; set; } 

    // Info that only the view needs, which is defined in the Controller based on some logic 
    public string ActiveTitle { get; set; } 

    // A bre 
    public IList<Object> ParentObjects { get; set; } 
} 

그때 내 상세 컨트롤러 방법이 사용이 잘 보입니까

public ActionResult Detail(int objectId) 
{ 

    // TODO: Make this a service call 
    var object = _db.Objects.FirstOrDefault(s => s.ObjectId == objectId); 

    if (object == null) 
    { 
     return View("Error"); 
    } 

    var model = new SetViewModel() { 
     ActiveTitle = object.Name, 
     Object = object, 
     ParentObjectId = object.ParentObject.ObjectId, 
     ParentObjects = _objectService.GetParentObjects(set.ParentObject) 
    }; 

    return View(model); 
} 

? 또는 필드을 객체 모델에서 viewModel로 가져오고 객체이 아닌 객체를 가져와야합니까?

+0

첫째, 나는 이것이 바람직한 질문이라고 생각하지 않습니다. 둘째, 필요한만큼의 데이터를 가져옵니다. 전체 개체를 사용하는 것이 좋습니다. 모든 속성을 사용하지 않으면 허용되는 성능에 맞는지 아닌지 결정됩니다. – musefan

답변

0

원래 프로그래머가 아닌 경우보기 모델에 개체 유형을 지정하는 것이 매우 모호하며 코드를 지원하기가 어려울 수 있습니다. 실제 모델에 클래스 유형을 추가하거나 아래에 표시된대로 클래스 유형을 지정하기 위해 제네릭을 사용합니다.

public class ObjectViewModel<T> 
{ 
    // Used when creating a new object under a parent object 
    [HiddenInput(DisplayValue = false)] 
    public int? ParentObjectId { get; set; } 

    [Required] 
    public T Object { get; set; } 

    // Info that only the view needs, which is defined in the Controller based on some logic 
    public string ActiveTitle { get; set; } 

    // A bre 
    public IList<T> ParentObjects { get; set; } 
} 
0

두 옵션 중 하나를 사용할 수 있으며 특정 응용 프로그램에 두 기술이 혼합되어있는 경우가 많습니다.

중요한 아이디어는 사용자에게 데이터를 표시하기 위해 뷰 모델에이 필요하다는 것을 표시 모델에 이 있어야한다는 것입니다.

보기가 단순한 컨트롤에 개별 기본 필드 만 표시하는 경우 (예 : 일련의 레이블 또는 텍스트 상자 컨트롤을 사용하는 경우보기 모델은 부모 개체가 아닌 필드 만 지정해야합니다.

그러나 복잡한 개체를 전체적으로 표시하는 방법을 알고있는 템플릿 또는 사용자 지정 컨트롤을보기에 포함 할 수 있습니다. 이 경우 뷰 모델은 전체 개체를 포함해야합니다. (실제로 WPF에서는 ASP-MVC보다 훨씬 자주이 작업을 수행하지만 두 작업은 모두 완료했습니다.)

0

답변은 상황에 맞는 것으로 보입니다. 계층화 된 아키텍처를 사용하는 많은 팀에서는 아키텍처 규칙을 채택하여 뷰 아래에서 X 아래의 계층을 직접 참조하면 안되며 데이터 액세스 클래스가 이러한 제한의 후보가 될 수 있습니다. 귀하의 경우에는 뷰의 구조를 데이터베이스 스키마 ("_db"를 사용하고 있으므로 가정)에 직접 바인딩하는 것처럼 보이는데 이는 무리한 결합으로 간주 될 수 있습니다.

또한, 귀하의 개체가 람다 식의 ObjectId 속성을 갖고있는 것처럼 보이기 때문에 문자 그대로 System.Object가 아닌 "일반적인 모든 것"을 나타 내기 위해 "개체"를 사용한다고 가정합니다.

관련 문제