以下の例のような複数レベルのクラス階層があります。
Model Dto
/ \ / \
CompanyModels User Model, etc.. CompanyDto UserDto, etc..
/ \ / \
PeopleModel OfficeModel PeopleDto OfficeDto
すべての "Company Models" は同じプロパティ (名前、住所など) を共有し、子モデル "People"、"Office" などは追加のプロパティを追加します。
「モデル」基本クラスには、次のメソッドがあります。これは、モデルをネットワーク経由で渡すのに必要なものだけに分解することを目的としています。
public virtual T AsDto<T>() where T : Dto, new()
{
var dto = new T();
dto.CreatedDate = this.CreatedDate;
dto.CreatedUserID = this.CreatedUserID; //etc..
return dto;
}
私の人生では、「CompanyModel」が「PeopleModel」と「OfficeModel」の両方で共有されるプロパティの割り当てを処理できるようにするための最適なパターンを見つけることはできません。
現在、私は以下の設定をしていますが、うまくいかないことはかなり確信しています:
public class CompanyModel : Model
{
public override CompanyDto AsDto<T>()
{
CompanyDto c = base.AsDto<CompanyDto>();
c.CompanyName = this.CompanyName; //etc...
return c;
}
}
public class PeopleModel : CompanyModel
{
public override PeopleDto AsDto<T>()
{
PeopleDto p = base.AsDto<PeopleDto>() as PeopleDto; //will return null
p.FirstName = this.FirstName;
p.LastName = this.LastName; //etc...
return p;
}
}
これを達成するための正しいパターンが何であるかを理解するのを手伝ってください...
前もって感謝します!