IRC Bot命令

时间:2016-01-29 13:18:04

标签: c# interface

我在C#中为Twitch.tv创建了一个非常简单的IRC bot。现在我只有PING和其他抽搐消息的命令。我正在使用状态模式来处理不同的命令。创建命令时会出现(未来)问题。我创建了一个CommandProvider类来创建不同的命令:

public interface ICommandProvider
{
    Dictionary<string, ICommandState> CommandList { get; set; }
}

public class CommandProvider : ICommandProvider
{
    public CommandProvider(IIRC irc)
    {
        CommandList = new Dictionary<string, ICommandState>();
        CommandList.Add("PING",new PingCommand() {Irc = irc});
        CommandList.Add("376",new Command376() { Irc = irc });
        CommandList.Add("366",new Command366() { Irc = irc });
    }
    public Dictionary<string, ICommandState> CommandList { get; set; } 
}

每个命令都来自ICommandState,如下所示:

public interface ICommandState
{
    IIRC Irc { get; set; }
    void Execute(object para = null);
}

问题是我想添加很多命令,有些可能使用点系统类,另一个会使用队列系统,而另一个命令可能会使用IRC和pointsystem类。在完成后,将有更多类被不同的命令使用,但我担心我的ICommandState会破坏接口隔离原则吗?有些命令可能不需要知道所有不同的类。

我想到的一个解决方案是使IRC类,Pointsystem类等静态,所以每个命令都可以在需要时访问它们但我的直觉告诉我这是错误的(如果这是为什么?)

我希望有人可以为我的问题提供智能解决方案

1 个答案:

答案 0 :(得分:1)

C#支持从多个接口继承,因此您可以在第二级进行此隔离,这些类实现的额外接口可以执行特定的操作

但是,我从一个普通的接口派生所有这些接口并使用单继承

Btw,checkout IoC(Inversion of Control)容器和MEF(Managed Extensibility Framework),包含在最近的.NET版本中