MVC : 완전히 채워진 모델 또는 부분적으로 채워진 모델?


10

이것은 오랫동안 나를 괴롭혔다. MVC 프로그래밍을 할 때 더 나은 프로그래밍 방법은 무엇이라고 생각하십니까? 완전히 채워진 모델 또는 부분적으로 채워진 모델을 사용해야합니까, 특히이 특정 작업에 대해 5 개의 다른 모델이있는 모델 개체에서 2 개의 필드 만 필요하다는 것을 알고 있을까요?

때로는 몇 가지 모델 만 필요하다는 것을 알 때 데이터베이스의 모든 값으로 20 개의 모델 객체 목록을 채우는 것이 범죄처럼 보일 수 있습니다.

물론 부분 모델은 모든 것을 가져 오는 방법 외에 DAO에 하나 이상의 방법을 작성해야 함을 의미합니다. 유지해야 할 코드가 더 많습니까?

반면에 완전히 채워진 모델로 DB에서 모든 것을 가져 오는 것은 한 가지 방법이 모두를 제공한다는 것을 의미하지만 분명히 성능 오버 헤드를 줄 것입니다.

ORM (Hibernate 또는 ActiveRecord of Rails 등)이 MVC 프로그래밍의 트렌드를 선호하고 Google의 BigTable 전체 모델과 같은 데이터베이스가 허용되는 트렌드를 볼 수 있습니다. 그러나 여전히 좋은 오래된 JDBC를 사용하고 있다면 어떨까요?

하드웨어가 저렴하고 개발 비용이 많이 듭니다. 앱이 시간당 수십만 건의 요청으로 확장되어야하는 경우에도 마찬가지입니까?


1
"반면에 완전히 채워진 모델을 사용하여 DB에서 모든 항목을 가져 오면 한 가지 방법으로 모든 기능을 수행 할 수 있지만 이는 분명히 성능 오버 헤드를 줄 것입니다." 이 연습에서 성능 오버 헤드를 측정 했습니까?
S.Lott

>> 정말요? 이 연습에서 성능 오버 헤드를 측정 했습니까? <<-이 작업을 예상했습니다. 아뇨 그러나 그렇지 않으면 측정하고 틀린 것으로 판명되는 것이 흥미로울 것입니다.
Pritam Barhate

오버 헤드가 존재하지 않음을 증명하기는 어렵습니다. 일부 상황에서는 측정이 유효하지 않다고 주장하는 많은 세부 정보를 쉽게 훑어 볼 수 있습니다. 데이터베이스, 애플리케이션 언어 등의 "일반적인"설정을 사용하고 실제 오버 헤드가 무엇인지 보여주기 위해 선호하는 구성을 프로파일 링하는 것이 훨씬 더 좋습니다. .
S.Lott

1
msdn.microsoft.com/en-us/magazine/ee236638.aspx 에서 도메인 모델 노출과 DTO 전송 문제를 다루는 훌륭한 기사를 찾았습니다 .
Mayo

답변:


3

두 가지 옵션이 있습니다.

1) 모델의 일부 필드를 채우지 않은 상태로 두십시오.

2) 특정 상황에 맞는 추가 "라이트"모델을 만듭니다.

어느 것을 선택해야하는지 다시 두 가지에 따라 다릅니다.

a) "full"모델의 몇 개의 필드를 무시할 것인가

b)이 "lite"모델이 얼마나 자주 인스턴스화 될 것인가

채워질 수없는 필드가 두 개 이상인 경우 1)로 이동해도됩니다.

b) 예외적 인 개별 상황 인 경우, 하나의 사용 사례에 대해서만 추가 모델을 작성할 필요가 없습니다.

또 다른 방법은 "lite"모델을 정의하고이 모델에서 "full"모델을 상속하는 것입니다.


답변 해주셔서 감사합니다. 필요에 따라 라이트 모델을 만드는 것이 합리적입니다. 그러나 때로는 그런 전략이 너무 많은 모델 클래스를 만들지 않을까 궁금합니다. 특히 비즈니스 로직 전용 모델이 아닌 뷰 전용 모델을 만드는 경우.
Pritam Barhate

3

뷰에 모델의 속성이 2 개만 필요한 경우 해당 사용 사례에 대해 잘못된 모델이있을 수 있습니다. 뷰에 적합한 모델을 만들고 추가 DB 조회를 저장하고 필요한 데이터 만 채울 것입니다. 후속보기에 더 자세한 정보가 필요하면 나중에 추가 데이터를 얻거나 모두 미리 가져와야합니까?

대안으로 일종의 지연 평가를 볼 수 있으므로 필요할 때 값이 채워집니다. 이것은 잘 작동 할 수는 있지만 분명히 더 많은 작업이며 DB에 여러 번 왕복 할 수 있으므로 많은 일을하는 경우 좋지 않습니다.

즉, 기본적으로 테이블이나보기에서 몇 가지 추가 필드를 선택하는 경우 추가 데이터를 얻는 데 드는 비용은 모든 의도와 목적에 0입니다 (확인, 와이어에 더 많은 바이트가 있지만 가장 큰 비용이 발생할 수 있음) 연결을 만들고 끊을 수 있습니다.) 따라서 추가 데이터가 필요할 경우 모델 이 마음에 든다면 모델을 완전히 채울 것입니다 .

하드웨어는 저렴하지만 하드웨어의 양이 많지 않아 나쁜 디자인의 성능을 향상시킬 수 있습니다.


2
>> 뷰에 모델의 속성이 2 개만 필요한 경우 잘못된 모델이 있습니다! <<-항상 착용 할 필요는 없습니다. 일반적인 사례는 비즈니스 응용 프로그램의 검색 결과 목록을 보여줍니다. 예를 들어 CRM에서 고객 (고객)은 대부분 검색 목록에 이름과 하나 또는 두 개의 중요한 필드 만 표시합니다. 그러나 CRM에는 해당 고객과 관련된 다른 몇 가지 필드가 있습니다.
Pritam Barhate

1
질문 에이 경우에는 두 가지 속성 만 필요하다고 말합니다.
Steve

-2

모델이 DAO가 아닙니다.

그리고 또 다른 것은 : 20 개의 모델 (예 : 고객)이 있다고하면 MVC 모델이 아닙니다. 도메인 모델 단일 테이블 행에 직접 매핑 되지 않습니다 . 대신 "고객"으로 수행 된 모든 작업에 대해 책임을 져야합니다.

귀하의 예에서 "고객"은 도메인 모델이 아니라 모델 내부의 개체입니다.

database와의 상호 작용에 대해서는 해당 책임을 데이터 매퍼 객체에 위임해야하며 ,이 클래스는 Customer 클래스의 인스턴스를 저장하고 가져 오는 방법을 알아야합니다.


PS 모델 내에 데이터베이스 로직이 있으면 도메인 비즈니스 로직을 컨트롤러로 푸시합니다.
mefisto

1
고객을 위해 모든 작업을 수행하는 하나의 클래스는 유지 관리가 어려울 수 있으므로 좋지 않습니다.
Andy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.