gpt4 book ai didi

C#——引用传递的设计思路

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:46 24 4
gpt4 key购买 nike

我有一个 C# Windows 服务,可以将传入的电子邮件和推特评论路由到可用的 Agents(我真的不知道 - 但应用程序做的事情非常相似)。所以,我有一个 Agents 列表,以及将这些电子邮件和推文路由到可用代理的逻辑。

我的代码看起来如何?

我有一个 AgentManager 类,用于跟踪可用的代理、他们的技能水平等。我有一个 EmailManager 类,它将 Emails 路由到 Agents。我有一个 TwitterManager 类,它将 Tweets 路由到 Agents

So - 与 Agents 相关的逻辑,例如 Agents 列表,谁有空,谁有能力发一条 Tweet,谁具有Email 的容量,等等都在AgentManager 中。

现在,当 EmailManager 检测到有一封新邮件并需要将其分配给一个 Agent 时,我想

AgentManager 获取我的代理列表(而不是返回数据库或在 EmailManager 中保留一个单独的代理列表)。

我最初的想法是通过引用将 AgentManager 传递给 EmailManager。我想这样做的原因是,当代理更改状态、添加/删除等时 - EmailManager 将始终与

一起工作

h 最新的 AgentManager(因此也是最新的 Agent 列表)。不知何故 - 这感觉很脏。我知道绕过 ref 已经过时了,但这似乎是处理这个问题的好方法。我做错了吗?

编辑:我通过引用传递 AgentManager 进行存储,而不是在 EmailManager 类中更改它。

最佳答案

从你的描述来看,相反的做法似乎更合理。
AgentManager 处理电子邮件和推文并了解其代理的所有信息 -
所以它应该有一个方法来接收电子邮件/推文列表并处理它们。

因为我们谈论的是引用类型,所以关于通过 ref 传递的问题有点不清楚。

例如:

AgentManager ag = new AgentManager();
EMailManager eg = new EMailManager();
TweetManaget tg = new TweetManager();

eg.LoadEMail();
List<EMails> mails = eg.GetMailsList();

tg.LoadTweet();
List<Tweets> tws = tg.GetTweetsList();

ag.ProcessData(mails, tws);

编辑:查看来自 OP 的评论我想到了另一种策略
让 EMailManager 和 TweetManager 声明 AgentManager 订阅的事件-

eg.EmailReceived += ag.NotifyEmail;
tg.TweetPolled += ag.NotifyTweet;


public class EventManager
{
public delegate void OnMailReceived(EMails m);
public event MailReceived;

........

private void GetMail()
{
EMails m;
.....
if(MailReceived != null)
MailReceived(m);
}
}

public class AgentManager()
{
public void NotifyEMail(EMails m)
{
.....
}


}

关于C#——引用传递的设计思路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637044/

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