ASP.NET MVC에서 뷰 모델에 ID가 있어야합니까?


11

모델을 업데이트 할 수있는 ASP.NET MVC 응용 프로그램을 개발할 때는 업데이트 된 뷰 모델을 가져 와서 현재 업데이트 된 모델과 다시 일치시키는 방법을 알아야합니다. 이 작업을 수행하는 몇 가지 다른 방법이있는 것 같습니다. 모델에 있어야하는 데이터를 컨트롤러에 저장하는 것이 적절한 MVC가 아닌 것처럼 MVC가 아닌지 궁금합니다.

모든 뷰 모델에는 ID가 있습니다 : 전문가

  • 항상 모델에 맞는지 확인하십시오.

단점

  • ID가 변경되지 않도록주의해야합니다. 그렇지 않으면 액세스 할 수없는 행을 업데이트하는 사용자를 가질 수 있습니다.

노출 된 최소 뷰 모델 만 ID를 갖습니다.

  • 사용자가 액세스해서는 안되는 데이터를 업데이트하지 않도록하기 위해 확인 작업이 훨씬 줄었습니다.

단점

  • 어떤 뷰 모델이 어떤 모델과 일치하는지 추적하기가 훨씬 더 어렵습니다.
  • 사용자가 액세스 할 수없는 데이터를 업데이트하지 않도록 ID가있는 몇 가지 뷰 모델을 확인해야합니다.

ID가없는 뷰 모델이 없습니다.

찬성

  • 업데이트를 위해 ID를 확인할 필요가 없습니다.

단점

  • 무국적 상태를 포기해야합니다.

두 가지 질문이 있습니다.

첫째, 올바른 선택과 잘못된 선택이 있습니까? (그렇지 않다면, 선택은 의견의 문제이며 두 번째 질문의 의견에 근거한 것이므로 무시해야합니다.)

둘째, 올바른 / 올바르지 않은 선택이 있다면 어느 것입니까?

의견을 명확히하기 위해 데이터베이스 객체와 유사한 뷰 모델이있을 때 이야기하고 있습니다.

이것을 생각하십시오 :

public class InvoiceViewModel  //Does not have ID, does not relate to model.
{
    public CustomerViewModel CustomerVM { get; set; }  //Maybe has ID?  Does relate to model.
    public AddressViewModel BillingAddressVM { get; set; } //Ditto
    public AddressViewModel ShippingAddressVM { get; set; } //Ditto
    public List<InvoiceLineItemViewModel> ItemVMs { get; set; }  //Each one has an ID?
}

이거 말고:

public class InvoiceViewModel
{
    public Customer Customer { get; set; }
    public Address BillingAddress { get; set; }
    public Address ShippingAddress { get; set; }
    public List<InvoiceLineItem> Items { get; set; }
}

2
ViewModel ID로 정확히 무엇을 하시겠습니까? ViewModel의 개별 객체에 자체 ID가 없습니까?
Robert Harvey

뷰 모델이 모델과 관련된 경우에만 지정해야합니다. 모든 뷰 모델이 관련된 것은 아닙니다.
Lawtonfogle

You have to abandon statelessness.-MVC 무의미한 사용을 선택했습니다.
Joel Etherton

여기서 참조하는 ID가 데이터베이스 기본 키이거나 ViewModel에 추가하는 다른 것입니까?
Vermis

@Vermis, 데이터베이스 기본 키는 간단한 ID라고 생각합니다. 보다 철저한 ID는 수정 불가능한 데이터로, 편집 된 변경 사항을 유지하기 위해 편집 된 개체를 아직 편집되지 않은 지속 버전과 다시 연결할 수 있습니다.
Lawtonfogle

답변:


1

ViewModel 객체는 일반적으로 데이터베이스 테이블에 저장되는 것이 아닙니다. ViewModel 객체에 저장된 개별 항목입니다. 각 항목에는 이미 ID가 있습니다.

예를 들면 다음과 같습니다.

public class InvoiceViewModel
{
    public Customer Customer { get; set; }
    public Address BillingAddress { get; set; }
    public Address ShippingAddress { get; set; }
    public List<InvoiceLineItem> Items { get; set; }
}

데이터베이스에 InvoiceViewModel에 해당하는 단일 테이블이 없으므로 InvoiceViewModel 오브젝트의 ID가 없습니다.

물론 InvoiceID를이 특정 ViewModel의 ID로 항상 사용할 수 있습니다. InvoiceID는이 개체가 궁극적으로 나타내는 것이므로 편리합니다. 그러나 데이터베이스의 특정 ID에 해당하지 않는 ViewModel 객체가 있음을 알 수 있습니다.


1
보기 모델에서 실제 모델을 사용하는 대신 InvoiceViewModel에는 다른보기 모델 (모델과 관련된) 만 포함되어 있습니다.
Lawtonfogle

-1

기본적으로 ID를 사용하지 않더라도 ID가 표시되어야합니다. 로 이름이 지정된 데이터베이스에 열을 작성하고 idauto increment위에 기능을 선택하면 정렬됩니다.


1
이것은 어쨌든 ID를 가져야하는 이유를 다루지 않고 다른 대답과 직접 모순 됩니다.
Martijn Pieters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.