私は最近、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自体はサービス操作に固有であるため、ここでこの検証を行うことは問題ありませんか、それともビジネスロジックが存在する場所に関するある種のルールに違反していますか?