2011-10-16 3 views
2

내 아키텍처를 이동하지 않고 서비스와 직접 상호 작용할 수 있어야하는 것은 다음과 같습니다 인격 세부 정보 페이지로보기 중 하나의MVC가 -보기가 컨트롤러를 통해

View - Controller - Services 

생각합니다. 컨트롤러는

(Person) service.getPerson(1234) 

을 호출하고 표시 할 뷰에 Person 인스턴스를 반환합니다. 서비스가 Person을 가져 오는 방법은 RESTFul 웹 서비스를 통해 상호 작용하는 것입니다.

<person> 
    <id>1234</id> 
    <name>John Doe</name> 
    <person-detail-uri>/person/1234/detail</person-detail-uri> 
</person> 

위의 응답이이 같은 모습 클래스라는 사람에 매핑 : 완전한 사람 개체를 만들 수 있습니다

class Person{ 
    Long id; 
    String name; 
    String age; 
    String address 
} 

평온한 서비스는 다음과 같은 응답에 다시 응답 그 사람을 통해 얻는 것

/person/1234 

그리고 나서 de 꼬리 통과

/person/1234/detail 

보기에 사람 세부 정보를 표시해야한다고 가정합니다.

질문 :

옵션 A : 컨트롤러 호출이 getPerson()와 서비스에 getPersonDetails()가 완전한 사람 인스턴스를 작성해야

또는

옵션 B : 그냥이 getPerson()와 어떻게 든 (아마도 aspect를 통해) detail fetch를 트리거 할 view.geAge()를 호출하자.

옵션 A에서 약간의 유연성을 잃지 만보기에 좋지 않은 코드가 캐시를 오염시킬 수 없으므로 성능 문제가 발생하지 않을 수 있으므로 모델을 매우 바보로 만듭니다.

답변

2

"해야 함"이 없습니다. 단지 다릅니다. IMO 의도하지 않은 많은 쿼리를 실수로 쉽게 실행할 수 있기 때문에보기 레이어가 지연 초기화를 수행하는 것은 위험합니다.

또한 컨트롤러 또는 모델에서 데이터 가져 오기를 분리하는 것이 아니라 데이터 초기화를 제어한다는 점에서 뷰 레이어를 상당히 지능적으로 만듭니다. 나는 바보 같은 견해를 좋아하지만, 순수한 기술적 논증에 기초한 것이 아니라 편향 될 수 있습니다.

관련 문제