У меня есть интерфейс, как показано ниже:
public interface IRequest
{
Guid RequestUId { get; set; }
TicketSystemTypeEnum TicketSystemType { get; set; }
}
, который реализуется классами Request, DeskPro, ServiceNow, как показано ниже:
public class Request : IRequest
{
public Guid RequestUId { get; set; }
public Guid RequestId { get; set; }
public Guid RequestResourceId { get; set; }
public string RequestCreator { get; set; }
public DateTime CreatedDate { get; set; }
public List<Task> Tasks { get; set; }
public TicketSystemTypeEnum TicketSystemType { get; set; }
public StatusEnum Status { get; set; }
}
public class DeskPro : IRequest
{
public Guid RequestUId { get; set; }
public Guid TicketId { get; set; }
public Guid EmployeeId { get; set; }
public DateTime DateCreated { get; set; }
public List<Task> Tasks { get; set; }
public TicketSystemTypeEnum TicketSystemType { get; set; }
public StatusEnum TicketStatus { get; set; }
}
public class ServiceNow : IRequest
{
public Guid RequestUId { get; set; }
public Guid TicketNumber { get; set; }
public Guid EmployeeNumber { get; set; }
public DateTime CreatedOn { get; set; }
public List<Task> Tasks { get; set; }
public TicketSystemTypeEnum TicketSystemType { get; set; }
public StatusEnum TicketPosition { get; set; }
}
Теперь данные из объекта Request должны быть отправлены в DeskPro и ServiceNow в их соответствующем формате. Для чего используются картографы. Опять же, чтобы получить соответствующую систему тикетов, используется фабричный метод.
private IRequest mappedData;
public IRequest GetMappedData(Request request)
{
IRequest requestedProduct = RequestFactory.CreateRequestFactory(request.TicketSystemType);
requestedProduct.RequestUId = request.RequestUId;
***requestedProduct.TicketId = request.RequestId;
requestedProduct.EmployeeId = request.RequestResourceId;
requestedProduct.DateCreated = request.CreatedDate;
requestedProduct.TicketStatus = request.Status;***
requestedProduct.TicketSystemType = request.TicketSystemType;
return mappedData;
}
public abstract class RequestFactory
{
public static IRequest CreateRequestFactory(TicketSystemTypeEnum ticketSystemTypeEnum)
{
switch(ticketSystemTypeEnum)
{
case TicketSystemTypeEnum.DeskPro:
return new DeskPro();
case TicketSystemTypeEnum.ServiceNow:
return new ServiceNow();
default:
return null;
}
}
}
Однако я получаю ошибку в методе отображения - GetMappedData () - между тремя ***. Это снова очевидно, потому что наш IRequest не имеет всех этих полей. Итак, как мы можем решить эту проблему - что на основе моего типа объекта, этот объект может быть создан. Кроме того, если нужно избегать лестницы.