我有一个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; }
}
当通过REST返回所有这些字段时,这很快变成了一个非常大的模型。
所以,我的基本问题是...... 传输上面的大型模型,使用FEWER Rest调用,传输较小的对象以及使用更多的Rest调用来检索其他数据是否更好。 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 :(得分:4)
就个人而言,我更喜欢退回较轻的物体。我可以详细说明原因,但是这篇文章为我做了很好的工作:
http://davybrion.com/blog/2010/05/why-you-shouldnt-expose-your-entities-through-your-services/
现在,在您的情况下,您可以返回对象内部的列表,然后进行REST调用以接受ID列表(在您的案例中为Guids),然后返回对象列表,这些对象本身是轻量级的。这将为您提供两全其美 - 更轻的对象和减少的REST调用次数。
答案 1 :(得分:1)
rpc通话的一般智慧是让它们变得更加厚实,但就像其他任何东西一样,这一切都取决于你的情况。 IMO你应该尽量让它变得更大,而不会拉太多数据:-) 因此,如果你有一个ui或者某种东西,你应该专注于用户任务而不是数据,并且看看用户将在该UI上执行哪些任务,以及它需要多少数据。你应该让他们拥有与任务相关的dtos,并明确地提取这些dtos,但最重要的是DTO与任务相关,而商业模式存在于服务器上(这与业务相关)。