2011-11-21 3 views
3

나는 SOA 애플리케이션을 가지고 있으며 일부 성능 문제가 발생하기 시작했습니다.Wcf REST에서 더 적은 요청으로 더 큰 모델을 반환하거나 더 많은 요청으로 더 많은 모델을 반환하는 것이 더 좋습니까

나는 그것이 채워 그 모든 필드 REST를 통해 반환 될 때 모델은 꽤 빨리 꽤 큰 모델로 ... 유사 REST에서이 켜지

public class Person 
{ 
    public Guid Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Address Address { get; set; } 
    public IEnumerable<Hobby> Hobbies { get; set; } 
    public IEnumerable<Interests> Interests { get; set; } 
    public IEnumerable<Friends> Friends { get; set; } 
} 

오고 있습니다.

그래서, 내 기본적인 질문은 ... 는 더 나은 위에서 큰 모델을 전송하고 적은 나머지 통화를 사용하거나 작은 객체를 전송하고 더 나머지 데이터의 다른 조각을 검색하기 위해 호출을 사용하는 것입니다. I.E. ...

생각을 ...

public class Person 
{ 
    public Guid Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public AddressId AddressId { get; set; } 
    public IEnumerable<Guid> Hobbies { get; set; } 
    public IEnumerable<Guid> Interests { get; set; } 
    public IEnumerable<Guid> Friends { get; set; } 
} 

을이 같은 모델이 필요에 따라 이제 잡아에게 다른 속성을 이동?

+0

궁금합니다. 성능 문제는 무엇입니까? 응답을 구성하는 데 너무 오래 걸리거나 응답 크기가 너무 커서 전송에 문제가 있습니까? 또한 '친구'는 '사람'의 모임입니까? –

+0

나는 500 명의 "사람"을 검색하는 테스트를했고 페이지는 꽤 오랜 시간 (12 초 이상) 돌아왔다. 그리고 성능 문제보다 더, 나는 단지 현명한 방법으로 그 일을 설계하고 싶습니다 ... :) – jcreamer898

답변

4

개인적으로 나는 가벼운 물건을 반납하는 것을 선호합니다. 나는 이유에 정교하게 수 있지만이 문서 나를 위해 그 일의 꽤 좋은 직장을 수행합니다

http://davybrion.com/blog/2010/05/why-you-shouldnt-expose-your-entities-through-your-services/

지금, 당신의 경우에, 당신은 당신의 객체의 내부 목록을 반환 할 수 있습니다를, 다음 REST 호출을 그러면 ID 목록 (귀하의 경우 Guids)을 받아들이고 가벼운 객체 목록을 반환합니다. 이렇게하면 가벼운 오브젝트와 REST 호출 수가 줄어들어 두 가지 장점을 모두 누릴 수 있습니다.

1

rpc 호출에 대한 일반적인 지식은 그 (것)들을 chunkier하게 만드는 것이지만, 다른 모든 것처럼 그것은 모두 귀하의 sitiuation에 달려 있습니다. IMO 너무 많은 데이터를 가져 오지 않으면 가능한 한 칙칙해질 수 있도록 노력해야합니다 :-) UI가 있거나있는 경우 데이터 대신 사용자 작업에 집중해야하며 사용자가 수행 할 작업이 무엇인지 확인해야합니다 그리고 얼마나 많은 데이터가 필요한지에 대한 정보를 제공합니다. 태스크와 관련된 dtos를 가지고 있어야하고 명시 적으로 dtos를 가져야하지만 DTO는 태스크와 관련이 있으며 비즈니스 모델은 서버와 관련되어 있습니다 (더 많은 비즈니스 관련).