man*_*eko 6 c# design-patterns repository-pattern
我有一个抽象的"Action"类,它派生了ActionAppointment,ActionCall,ActionEmail和ActionLetter的类型.我正在尝试编写一个会干掉我们服务层的函数,所以我们不再编写5次CRUD调用了.
我在服务层中有一些更新逻辑(为简洁起见,删除了许多其他代码):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们的存储库是如何设置的,我必须使用专门命名的存储库(即,我无法通过_actionRepository更新ActionLetter,即使它派生自Action)
我一直在阅读不同的模式,它听起来像一个类似于工厂模式的东西,但我看不出如何让它工作.
我错过了一些愚蠢的东西吗?
Mat*_*nen 11
你不能只为每种动作类型写一个重载方法吗?忘记<T>和typeof东西-你正在做的是手工实现内置的语言特性(方法重载),并在太脆弱方式.