現在、この機能を提供するために拡張メソッドを使用していますが、もっとクリーンなソリューションがあると感じずにはいられません。AutoMapper をいじってみましたが、複雑なケースでどのように問題を解決したのかよくわかりませんでした。単純な 1:1 の場合は機能しますが、データをいじる必要がある場合は、がっかりするようです。
だから、私は次のようなものを持っています:
public static class ProvisioningExtensions
{
// Convert ProvisioningServicesProxy.Provisioning to ProvisioningDetailsModel.
public static ProvisioningDetailsModel ToProvisioningDetailsModel(this Provisioning provisioning)
{
var provisioningDetailsModel = new ProvisioningDetailsModel
{
ID = provisioning.ID,
TaskDeviceID = provisioning.TaskDevice.ID,
ServiceGroupID = provisioning.ServiceGroup.ID,
ServiceID = provisioning.Service.ID,
PatchSchedules = provisioning.PatchSchedules.Select(ps => ps.ToPatchScheduleDetailsModel()).ToList()
};
return provisioningDetailsModel;
}
// Convert ProvisioningDetailsModel to ProvisioningServicesProxy.PatchSchedule.
public static Provisioning ToProvisioning(this ProvisioningDetailsModel provisioningDetailsModel)
{
WorkflowManager workflowManager = new WorkflowManager();
ProvisioningManager provisioningManager = new ProvisioningManager();
TaskDevice taskDevice = workflowManager.GetTaskDeviceByID(provisioningDetailsModel.TaskDeviceID);
Service service = provisioningManager.GetServiceByID(provisioningDetailsModel.ServiceID);
ServiceGroup serviceGroup = provisioningManager.GetServiceGroupByID(provisioningDetailsModel.ServiceGroupID);
var provisioning = new Provisioning
{
ID = provisioningDetailsModel.ID,
TaskDevice = taskDevice,
ServiceGroup = serviceGroup,
Service = service,
PatchSchedules = provisioningDetailsModel.PatchSchedules.Select(ps => ps.ToPatchSchedule()).ToArray()
};
return provisioning;
}
}
ProvisioningDetailsModel は、モデルのプロパティのみを含むクラスです。特にない。
モデルの代わりに使用できるように、Provisioning ドメイン オブジェクトを装飾することも考えましたが、やめました。プロビジョニング データを 2 つの異なる方法で表現したい場合はどうでしょうか。ドメイン オブジェクト自体をモデルとして使用する場合、これは不可能です。
他にどのようなオプションを検討する必要がありますか? 拡張メソッドは私の最後の選択肢です。特に、ToProvisioning 内で比較的重い作業を行う必要がある場合はそうです。