我在我的业务层和表示层之间使用DTO,并且在服务中有一些映射代码,用于转换DTO< - >域对象。我目前正在允许PL部分填充DTO并将其发送到更新服务,该服务仅更新关联DO上的已更改属性。
在部分填充的DTO中处理非可空(值)类型的常用方法是什么?对于可空类型,我只检查DTO值是否为空,如果不是,则在DO上设置相应的值。但是非nullables将始终包含一个值,该值可能由PL设置,也可能没有。
我可以:
这些似乎都不理想:有没有我错过的选择?还是我从错误的角度来解决这个问题?
如果相关,我正在使用C#4,WCF和ASP.NET MVC
答案 0 :(得分:1)
您能提供有关您提到的非可空值类型的更多信息吗?您是否知道可以在您的DTO中使用的Nullable Types?
答案 1 :(得分:1)
一种方法是将更改的属性列表传递给更新服务。这可以像一个整数一样简单,其中每个位指示一些属性或属性索引或名称等的数组。您还可以使DTO的自我跟踪在某种意义上,每个DTO将维护已更改的属性。
我通常不喜欢这样的部分更新 - 如果要允许这些部分更新,那么创建复合DTO(将属性划分为子对象拥有的属性组)是有意义的,其中客户端能够在组级别更新(即必须填充组内的所有属性)。如果需要在每个属性级别进行更新控制,那么使用PropertyBag(名称/索引 - 值对的字典)类型的DTO更有意义。