2011-05-12 2 views
3

www.dofactory.com 및 www.blackwasp.com에 따르면 가상 프록시를 사용하여 복잡한 개체의 단순화 된 버전을 제공합니다. 객체의 세부 사항이 필요할 때만 주 객체가 실제로 채워지고 게으른 로딩 형식을 제공합니다. lazy loading을 사용할 때마다 가상 프록시라고 부를 수 있습니까? 값 비싼 물건을 사용할 때를 제외하고 우리가 사용해야하는 다른 이유가 있습니까? 나는 그것을 생생하게 본다. 누군가 그것에 대해 좋은 설명을 해줄 수 있습니까?가상 프록시 란 무엇입니까?

+1

저는 가상 프록시를 잘 사용하는 것이 매우 드뭅니다. 대부분의 프록시는 이러한 전략이 추가하는 복잡성 때문에 부분적으로 가상 또는 캐싱이 아닙니다. –

+0

@ PeterLawrey 데이터 매퍼 및 지연로드를 구현 한 적이 있습니까? 데이터 맵퍼를 사용하면 실제로 게으른로드를 사용하지 않습니까? –

+0

가상 프록시를 사용하거나 사용하지 않고 구현했습니다. 요즘 프록시 대신 프로덕션 코드를 위해 생성 된 코드를 사용하는 경향이 있습니다. 반대로 나는 테스트를 위해 가상 프록시 (라이브러리 조롱을 통해)를 사용하는 경향이있다. 가상 프록시는 덜 효과적입니다. –

답변

2

나는 그것을 할 필요가 전혀 느껴 본 적이 없지만 수 있습니다lazily initialize expensive object graphs 가상 프록시를 사용하십시오. 그러나 매우 드물게이 작업을 수행해야합니다.

+0

이것은 게으른로드를 사용한 적이 없다는 것을 의미합니까? 데이터 맵퍼에서 항상 완벽한 개체 그래프를 얻을 수 있습니다 (필요한 데이터 만 사용). –

+1

지연로드는 N + 1 문제로 연결되므로 피할 수 있습니다. 당신이 가져 오는 것을 명시하는 것이 더 낳습니다. –

+0

나를 위해, 때때로 어떤 데이터베이스 테이블 조인을 만든 다음 다른 선택/조인과 병합 (그리고 나서 개체 채우기)하는 것이 더 빠르거나 더 쉽습니다. 이와 같은 경우에 프록시가 구현되면 두 번째 쿼리 병합이 피할 수 있습니다. 프록시가 이미 분리 된 쿼리에서 수행되는 관계이기 때문에 두 번째 쿼리 병합을 피할 수 있습니다. 그 시나리오에 대해 생각 해본 적이 있습니까? 이 경우 쿼리 분리는 성능 및 응답 시간으로 인한 것이기 때문에 아무런 문제가 없습니다. @PeterLawrey가 상기 (quest.comment)와 같은 쿼리를 사용하기 전에 테스트하는 방법으로도 가치가 있습니다. –

관련 문제