1

私は、受信メールとツイッターのコメントを利用できるようにルーティングするC#Windowsサービスを持っていますAgents(私はそうではありませんが、アプリは非常に似たようなことをします)。Agentsそのため、これらのメールとツイートを利用可能なエージェントにルーティングするためのリストとロジックがあります。

私のコードはどのように見えますか?

AgentManagerどのエージェントが対応可能か、そのスキル レベルなどを追跡するクラスがあります。 にEmailManagerルーティングEmailsするクラスがありAgentsます。にルーティングするクラスTwitterManagerがあります。TweetsAgents

Agentsのリストなど、に関連する論理はAgents、誰が利用可能か、誰が能力を持っているかTweet、誰が能力を持っているかEmailなどはすべてAgentManager.

今、EmailManager新しい電子メールがあり、それをに割り当てる必要があることを検出したときAgent、私はしたい

からエージェントのリストを取得しAgentManagerます (データベースに戻ったり、別のエージェントのリストを保持したりするのではなくEmailManager)。

私の最初の考えは、参照によって渡すAgentManagerことEmailManagerです。私がこれをしたい理由は、エージェントが状態を変更したり、追加/削除されたりしたときなどです-EmailManager常に機能します

h 最新AgentManager(したがって、最新のエージェント リスト)。なんとなく――これは汚い。ref を渡すのが時代遅れであることはわかっていますが、これを処理するには良い方法のようです。私はそれを間違っていますか?

編集: 私は、ストレージの参照によって AgentManager を渡しています。EmailManager クラスで変更するのではありません。

4

1 に答える 1

2

あなたの説明から、逆に行くにはもっと音が大きいようです。
AgentManager は、E メールとツイートを処理し、そのエージェントのすべてを認識します
。したがって、E メール/ツイートのリストを受け取り、それらを処理するメソッドが必要です。

参照型について話しているので、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)
     {
         .....
     }


}
于 2012-05-17T14:01:57.767 に答える