将部分填充的DTO映射到域对象

时间:2010-09-01 05:45:51

标签: c# wcf web-services dto

我在我的业务层和表示层之间使用DTO,并且在服务中有一些映射代码,用于转换DTO< - >域对象。我目前正在允许PL部分填充DTO并将其发送到更新服务,该服务仅更新关联DO上的已更改属性。

在部分填充的DTO中处理非可空(值)类型的常用方法是什么?对于可空类型,我只检查DTO值是否为空,如果不是,则在DO上设置相应的值。但是非nullables将始终包含一个值,该值可能由PL设置,也可能没有。

我可以:

  • 在DTO中使用自由格式字符串作为名义上的值类型属性并转换为值类型
  • 使PL调用服务方法来更新值属性,而不是通过DTO传递它们
  • 强制PL始终将完全填充的DTO发送到更新服务

这些似乎都不理想:有没有我错过的选择?还是我从错误的角度来解决这个问题?

如果相关,我正在使用C#4,WCF和ASP.NET MVC

2 个答案:

答案 0 :(得分:1)

您能提供有关您提到的非可空值类型的更多信息吗?您是否知道可以在您的DTO中使用的Nullable Types

答案 1 :(得分:1)

一种方法是将更改的属性列表传递给更新服务。这可以像一个整数一样简单,其中每个位指示一些属性或属性索引或名称等的数组。您还可以使DTO的自我跟踪在某种意义上,每个DTO将维护已更改的属性。

我通常不喜欢这样的部分更新 - 如果要允许这些部分更新,那么创建复合DTO(将属性划分为子对象拥有的属性组)是有意义的,其中客户端能够在组级别更新(即必须填充组内的所有属性)。如果需要在每个属性级别进行更新控制,那么使用PropertyBag(名称/索引 - 值对的字典)类型的DTO更有意义。