У меня есть абстрактный класс «Action», который имеет производные типы ActionAppointment, ActionCall, ActionEmail и ActionLetter.Я пытаюсь написать функцию, которая будет СУШИТЬ наш сервисный уровень, поэтому мы больше не пишем CRUD-вызовы 5 раз.
У меня на сервисном уровне есть некоторая логика обновления (много другого кода удалено длякраткость):
private IServiceResponse UpdateAction<T>(T action, string originalActionStatus) where T : Action
{
if (action.GetType() == typeof(Action))
{
_actionRepository.Update(action);
}
else if (action.GetType() == typeof(ActionAppointment))
{
_actionAppointmentRepository.Update(action as ActionAppointment);
}
else if (action.GetType() == typeof(ActionCall))
{
_actionCallRepository.Update(action as ActionCall);
}
else if (action.GetType() == typeof(ActionEmail))
{
_actionEmailRepository.Update(action as ActionEmail);
}
else if (action.GetType() == typeof(ActionLetter))
{
_actionLetterRepository.Update(action as ActionLetter);
}
}
К сожалению, как настроены наши репозитории, я должен использовать специально названные репозитории (т. е. я не могу обновить ActionLetter через _actionRepository, даже если он является производным от Action)
Я читал на разных шаблонах, и это звучит как что-то похожее на Factory Pattern, но я не понимаю, как заставить его работать.
Я что-то упустил из глупости?