我正在使用 DTO(数据传输对象)在我的应用程序的不同层之间传输信息。
关于性能和填充这些对象的方式,最佳做法是什么?我是否应该使用来自数据访问层的不同方法仅填写最少的必需信息?
假设我有以下类(class):
public class Order
{
public int OrderNo;
public Customer Customer;
public double Total;
}
public class Customer
{
public int CustId;
public string CustName;
public Country Country;
}
public class Country
{
public int CountryId;
public string CountryName;
}
如果我需要生成包含 OrderNo、CustName 和 CountryName 的订单列表,而在另一种情况下,不同的信息可能来自不同的表(或 DTO),会发生什么情况?最好使用仅包含必填字段的扁平化 DTO 还是使用 LINQ 进行查询?
我希望我说得够清楚了。
谢谢你的帮助!
编辑: 我想知道的是我是否应该填充所有嵌套对象,而不仅仅是对象的一部分属性。
最佳答案
我认为这将取决于您的 DTO 使用的广泛程度以及它们的复杂程度。对于如图所示的简单字段,填充所有字段不太可能对性能产生重大影响,并且使用通用映射代码会更容易。对于复杂对象图中的大量数据集,这将是一个更大的问题。
如果性能确实是一个问题并且您可以衡量通过更改获得的改进,我只会担心展平对象或取消 DTO(假设它们完全有意义)。
关于填充 DTO,我们同时使用 LINQ 和 AutoMapper在多层 ASP.NET MVC 应用程序中广泛使用。在我们的业务对象和传递给 View 的哑 View 模型对象之间进行映射时,AutoMapper 非常有用。虽然我们没有世界上最大的数据库,但我们有一个相当复杂的模式,并且没有因为映射而真正遇到任何性能瓶颈。
我们看到性能问题的一个地方是过早评估的 LINQ 查询,这些查询会拉回大量对象图,而不仅仅是所需的。通过检查“select new”是否在正确的时间执行,我将通过网络从数据库中提取 850 MB 数据的一个查询减少到 1.3 MB!
关于c# - 填充 DTO 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4657622/