Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在Wcf REST中,返回请求较少的较大模型更好,还是返回请求较多的较小模型更好_.net_Wcf_Rest_Wcf Rest - Fatal编程技术网

.net 在Wcf REST中,返回请求较少的较大模型更好,还是返回请求较多的较小模型更好

.net 在Wcf REST中,返回请求较少的较大模型更好,还是返回请求较多的较小模型更好,.net,wcf,rest,wcf-rest,.net,Wcf,Rest,Wcf Rest,我有一个SOA应用程序,开始遇到一些性能问题 我有从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<Hob

我有一个SOA应用程序,开始遇到一些性能问题

我有从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; }
}
公共类人物
{
公共Guid Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共广播地址{get;set;}
公共IEnumerable嗜好{get;set;}
公共IEnumerable兴趣{get;set;}
公共IEnumerable好友{get;set;}
}
当它通过REST返回并填充所有这些字段时,它很快就会变成一个相当大的模型

因此,我的基本问题是……传输上述大型模型并使用较少的Rest调用,还是传输较小的对象并使用更多的Rest调用来检索其他数据段更好。也就是说,有一个这样的模型

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; }
}
公共类人物
{
公共Guid Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共地址ID地址ID{get;set;}
公共IEnumerable嗜好{get;set;}
公共IEnumerable兴趣{get;set;}
公共IEnumerable好友{get;set;}
}
现在,根据需要去抓取其他属性


想法?

就我个人而言,我更喜欢返回较轻的对象。我可以详细说明原因,但这篇文章对我来说做得很好:


现在,在您的案例中,您可以返回对象内部的列表,然后使用REST调用来接受ID列表(在您的案例GUID中),然后返回对象列表,这些对象本身是轻量级的。这将为您提供两个方面的最佳选择—更轻的对象和更少的REST调用。

rpc调用的一般智慧是使它们更粗,但与其他任何符号一样,这一切都取决于您的位置。在我看来,您应该尽可能地使其更粗,而不需要拉太多数据:-)
所以,如果您有一个ui或其他东西,您应该关注用户任务,而不是数据,并查看用户将在该ui上执行哪些任务,以及它需要多少数据。您应该让他们拥有与任务相关的DTO,并明确地提取这些DTO,但底线是DTO与任务相关,业务模型存在于服务器上(与业务更相关)。

我很好奇-您的性能问题是什么?是构建响应需要太长时间,还是响应的大小需要太长时间才能传输?另外,
Friends
是否是
Person
的集合?我做了一个测试,检索了500个“Person”,页面花了很长时间才返回(12s+)。甚至比性能问题更重要的是,我只想以一种聪明的方式来设计它……:)