【发布时间】:2012-05-13 03:27:34
【问题描述】:
现在已经到了 WCF 地狱的第 74 级,我被判处永远的 DTO 混乱。我非常习惯于像这样明智地封装对象/属性设置机制,其中在构造函数中设置了一些默认值,并且重置该值会“弄脏”对象:
public class SomeObject
{
private int someValue;
public int SomeValue
{
get { return someValue; }
set
{
someValue = value;
// now SomeObject.IsDirty = true;
}
}
public SomeObject(int someDefaultValue)
{
someValue = someDefaultValue;
}
}
DTO 似乎强烈反对这种简单的构造,我假设(但不知道)通过 DataContract 和 DataMember 装饰器。当我单步执行时,我看到堆栈中有一些我无法闯入的调用,但这大致是结果:
[DataContract]
public class SomeObjectDTO
{
private int someValue;
[DataMember]
public int SomeValue
{
get { return someValue; }
set
{
// apparently the set is getting called by the constructor?
someValue = value;
}
}
public SomeObjectDTO(int someDefaultValue)
{
//apparently no one cares what I want to do here? next line won't fire
someValue = someDefaultValue;
}
}
我可以看到构造函数参数的值流入set,但我不知道如何,我看不到如何将mapper-constructed-default值与user-edited-property分开-value-and-now-it-must-be-returned-to-the-service EDIT.
我确信这是对 DTO 的误用,但我看不到正确的 WCF 方法来处理这些非常基本的常见情况:
- 如何将属性值的实例化与 编辑它?
- 如果您有一个具有 50 个属性的对象/DTO,您如何知道用户何时更改了其中的 49 个属性,以及如何将这些更改一次性发送回 BLL 母对象船?李>
【问题讨论】:
-
您的 OperationContracts 上是否使用了 DTO?
-
是的,这就是他们创作的全部目的。
标签: wcf events c#-4.0 properties dto