我们在我们的WCF web服务中使用DTO作为数据契约。这些DTO的目的是仅公开与特定API方法相关的信息。
我向你们寻求的是一些关于这里的最佳实践的建议。
例如,考虑以下简单模型:
class Order
{
int CreatedBy { get; set; }
DateTime CreatedOn { get; set; }
string Description { get; set; }
int Id { get; set; }
string Name { get; set; }
}
假设我们的API允许消费者创建、更新和获取订单,我们已经创建了以下DTO。为简单起见,删除了DataMember和DataContract属性。
Create方法:用户无法指定Id和CreatedOn属性,因此DTO如下所示:
class CreateOrderData
{
int CreatedBy { get; set; }
string Description { get; set; }
string Name { get; set; }
}
Update方法:用户无法指定Id、CreatedOn和CreatedBy属性,因此DTO如下所示:
class UpdateOrderData
{
string Description { get; set; }
string Name { get; set; }
}
Get方法:用户应该能够看到订单的所有内容,因此DTO如下所示:
class OrderData
{
int CreatedBy { get; set; }
DateTime CreatedOn { get; set; }
string Description { get; set; }
int Id { get; set; }
string Name { get; set; }
}
所以我的问题是:
更新:
我认为我不喜欢DTO中的继承,因为基类也将在WSDL中公开,客户端将能够看到它并实例化它,这在我看来是很脏的(参见:WCF Serialization with object inheritance?)。如何在DTO中使用接口来强制公共属性而不是继承?由于DTO中不应该有任何行为,因此我们不会因为替换继承而损失太多。
发布于 2012-08-17 02:48:58
由于这很大程度上是关于个人喜好,我会这样做..
,
我曾经参与过多个使用相同通用架构的项目,我通常使用AutoMapper将dtos映射到域。它对我来说很有效!
https://stackoverflow.com/questions/11979688
复制相似问题