gpt4 book ai didi

抽象类特定代码的 C# 模式

转载 作者:太空狗 更新时间:2023-10-29 21:19:26 25 4
gpt4 key购买 nike

我有一个抽象的“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);
}
}

不幸的是,我们的存储库是如何设置的,我必须使用专门命名的存储库(即,我无法通过 _actionRepository 更新 ActionLetter,即使它派生自 Action)

我一直在阅读不同的模式,这听起来像是类似于工厂模式的东西,但我看不出如何让它发挥作用。

我是不是漏掉了什么蠢东西?

最佳答案

您不能为每种操作类型编写该方法的重载吗?忘记 <T>typeof stuff - 你正在做的是手动实现一个内置的语言特性(方法重载),而且是以一种脆弱的方式。

关于抽象类特定代码的 C# 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6459947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com