У меня есть абстрактный класс «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)
Я читал о разных шаблонах, и это похоже на заводской шаблон, но я не вижу, как заставить его работать.
Я упустил какую-то глупость?