首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IRC Bot命令

IRC Bot命令
EN

Stack Overflow用户
提问于 2016-01-29 13:18:03
回答 1查看 231关注 0票数 0

我为Twitch.tv在C#中创建了一个非常简单的IRC机器人。现在,我只拥有用于PING和其他抽动消息的命令。我使用状态模式来处理不同的命令。创建命令时会出现(未来)问题。我创建了一个CommandProvider类,它创建了如下所示的不同命令:

代码语言:javascript
复制
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派生的:

代码语言:javascript
复制
public interface ICommandState
{
    IIRC Irc { get; set; }
    void Execute(object para = null);
}

问题是我想要添加很多命令,一些命令可能使用切入点系统类,另一些命令使用排队系统,还有一个命令可能使用IRC和pointsystem类。当我完成时,会有更多的类被不同的命令使用,但是我的ICommandState会打破接口隔离的原则吗?因为有些命令可能不需要知道所有不同的类。

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

我希望有人能拿出一个聪明的办法来解决我的问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-29 18:05:58

C#支持从多个接口继承,所以在第2层有这种隔离,对于额外的接口,这些类实现来执行特定的事情。

但是,我会从一个公共接口中派生出所有这些接口,并使用单个继承。

顺便说一下,签出IoC (反转控制)容器和MEF (托管扩展框架),包括在最近的.NET版本

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35085560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档