我最近一直在阅读有关 DTO 的大量信息,以前从未使用过它们。我读过的一篇文章谈到了 DTO 不应该只是复制域模型对象,而是每个 DTO 应该针对正在执行的服务操作进行定制。
如果我决定使用 DTO,这让我开始考虑验证,并想知道以下内容是否可以接受?
public class Person {
public Guid Id {get; set;}
public string Name {get; set;}
public Address Address {get; set;}
}
public class Address {
public Guid Id {get; set;}
public string AddressLine1 {get;set;}
...
}
publuc class CreatePersonDTO {
private string _name;
private string _addressLine1;
public string Name {
get {
if (_name == null)
throw new Exception("Missing");
return _name;
}
set { _name = value; }
}
public string AddressLine1 {
get { return _addressLine1; }
set { _addressLine1 = value; }
}
}
因此,您可以在 Json 或 Xml 中传递数据,并将其序列化为对象 CreatePersonDTO,并且在映射这些值以创建 Person 和 Address 对象时,如果缺少 Persons Name,它将引发验证异常。
由于 DTO 本身是特定于服务操作的,所以在这里进行此验证是否可以,或者它是否违反了某种关于业务逻辑应驻留在何处的规则?