2
我們目前使用擴展方法來提供這種功能,但我不禁感到有一個更清潔的解決方案。我玩過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是隻包含模型的屬性的類。沒什麼特別的。
我考慮過裝配配置域對象,以便它可以用來代替模型,但決定不使用它。如果我想以兩種不同的方式表示供應數據 - 如果我使用域對象本身作爲我的模型,這將是不可能的。
我應該考慮哪些其他選項?擴展方法將是我的最後選擇 - 尤其是當我必須在ToProvisioning中執行相對繁重的工作時。