我有一个c windows服务,可以将收到的电子邮件和twitter评论路由到可用的Agents(我不是真的-但是这个应用做了一些非常相似的事情)。所以,我有一个Agents列表,以及将这些电子邮件和tweets路由到可用代理的逻辑。
我的代码看起来怎么样?
我有一个AgentManager类,它跟踪哪些代理可用,他们的技能水平等。
我有一个将EmailManager路由到EmailsAgents类。
我有一个将TwitterManager路由到Tweets的类。
因此,与Agents相关的逻辑,如Agents列表、可用人员、具有Agents容量的人员、具有Tweet容量的人员等都在Email中。
现在,当AgentManager检测到有新电子邮件并需要将其分配给EmailManager时,我希望
Agent获取我的代理列表(而不是返回数据库或在AgentManager中保留单独的代理列表)。
我最初的想法是通过引用将EmailManager传递到AgentManager。我想这样做的原因是,当代理更改状态、添加/删除等时-EmailManager将始终与
h最新的EmailManager(因此是最新的代理列表)不知怎么的-这感觉很脏。我知道这是过时的通过裁判,但这似乎是一个很好的方式来处理这个问题。我做错了吗?
编辑:
我通过引用传递agentmanager以进行存储,而不是在emailmanager类中更改它。

最佳答案

从你的描述来看,似乎更倾向于走另一条路。
代理管理者处理电子邮件和推特,并了解其代理的所有信息-
因此它应该有一个方法来接收电子邮件/推文列表并对其进行处理。
因为我们谈到的是引用类型,所以关于传递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)
     {
         .....
     }


}

08-27 10:22