Jas*_*son 2 .net c# architecture dto
我正在使用DTO(数据传输对象)在我的应用程序的不同层之间传输信息.
在性能和填充这些对象的方式方面,最佳做法是什么?我应该使用不同的方法从我的数据访问层填充最低要求的信息吗?
假设我有以下课程:
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;
}
Run Code Online (Sandbox Code Playgroud)
如果我需要生成包含OrderNo,CustName和CountryName的订单列表会发生什么,而在另一种情况下,不同的信息可能来自不同的表(或DTO)?是否最好使用仅包含所需字段的展平DTO或使用LINQ进行查询?
我希望我说得够清楚.
谢谢你的帮助!
编辑: 我想知道的是,我是否应该填充所有嵌套对象,而不仅仅是对象的一部分属性.
我认为这将取决于您的DTO的使用范围以及它们的复杂程度.对于如图所示的简单,在填充所有字段时不太可能产生显着的性能影响,并且它将使得使用公共映射代码变得更容易.对于复杂对象图中的大量数据集来说,这将是一个更大的问题.
如果性能确实存在问题,我只会担心平面化物体或废弃DTO(假设它们有意义),您可以通过进行更改来衡量您将获得的改进.
关于填充DTO,我们在多层ASP.NET MVC应用程序中广泛使用LINQ和AutoMapper.在我们的业务对象与传递给视图的哑视图模型对象之间进行映射时,AutoMapper非常有用.虽然我们没有世界上最大的数据库,但我们有一个非常复杂的模式,并且由于映射而没有真正遇到任何性能瓶颈.
我们已经看到性能问题的一个地方是过早评估的LINQ查询,这些查询会回收大量的对象图而不仅仅是需要什么.通过检查"select new"是否在正确的时间执行,我减少了一个查询,将数据库中的850 MB数据从数据库拉到1.3 MB!
| 归档时间: |
|
| 查看次数: |
2713 次 |
| 最近记录: |