私はWCFサービスを持っており、ビジネスオブジェクト用のDTOを作成しました。データ転送オブジェクト - DTOまたはビジネスオブジェクトでマッピングを実行しますか?
私の質問は、2つの間のマッピングをどこに置くかです。
A)DTO?
public class PersonDTO
{
[DataMember] public string Id { get; set; }
[DataMember] public string Name { get; set; }
public void CloneFrom(Person p)
{
Id = p.Id;
Name = p.Name;
}
public void Populate(Person p)
{
p.Id = Id;
p.Name = Name;
}
}
またはビジネス・オブジェクト内
B)?
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public void CloneFrom(PersonDTO dto)
{
Id = dto.Id;
Name = dto.Name;
}
public PersonDTO GetDTO()
{
return new PersonDTO()
{
Id = Id;
Name = Name;
}
}
}
は、私は(のDTOの知識を持たないビジネス・オブジェクト)での関心事の分離を好きですが、私はBのカプセル化(DTOにビジネス・オブジェクトの根性を公開する必要はありません)を好みます。
標準的な方法があるのかどうか疑問に思っていますか?
本当に?私がビジネスオブジェクトを公開して、第3のクラスがマッピングを行うことができるようにするには、私はDTOでそれを行うかもしれません。まだ別のクラスを作成することは、私にかなり残忍なようです。私はautomapperを見ますが、ありがとう。 – GazTheDestroyer
@ GazTheDestroyer:DTOは、データ転送が変換されないことを意味します。 DTOはその使用法、すなわちマッピングを意識しているとは考えられない。それはデータを転送し、消費者はデータをこれまでの目的、すなわちViewModelにマップするなどの目的で使います。あなたはDTOにマッピングを追加することは自由ですが、私の謙虚な意見では、あなたがDTOの意図された目的を誤って使用しているので、あなたのDTOはもはやDTOではありません。現在のプロジェクトでは、リポジトリがエンティティを生成します。 BLはエンティティを受け取り、DTOにマップします。 UIレイヤはBLを照会し、DTOを取得し、必要に応じてViewModelsにマッピングします。 – Nope