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가 표시되어야합니다. 로 이름이 지정된 데이터베이스에 열을 작성하고 id그 auto increment위에 기능을 선택하면 정렬됩니다.


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