在各种场景中使用简单的 DTO 时,我经常遇到同样的问题,我一直想知道是否有更好的方法来处理它。
问题是,我有一个业务对象,例如Asset
,它有一堆属性、子对象和计算字段,其中一些在时间上计算成本很高,其中一些在数据量上很大。我需要在 UI 的各个屏幕中使用此对象的不同风格,例如
- 在显示层次结构的树中,我只需要显示名称即可
- 在我只显示几个属性的网格中
- 在有大量可用信息的详细信息窗格中,但仍有一些信息(如映射对象)仅按需显示
为了能够在这种情况下实现最佳性能,我总是为每个上下文创建不同的 DTO,只包含在该上下文中实际使用的信息子集。虽然是资源优化解决方案,但这会导致几个问题:
- 我有大量 DTO 类的类爆炸
- 我很难为同一个东西想出不同的名字,
AssetDtoForGridInTheOverviewScreenInTheUpperPaneAboveTheSplitter
更不用说以后维护它们了 - 我经常在转换方法中重复自己,因为大多数DTO 都使用了一些属性,但不是所有的都使用了(因此我不能将它们放入任何超类并重用转换逻辑)
我使用的技术是 ASP.NET SOAP WebServices 和 C# 3.5,但我认为这可能是一个与语言无关的问题。欢迎任何想法..