我为Twitch.tv在C#中创建了一个非常简单的IRC机器人。现在,我只拥有用于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类等等,静态的,这样每个命令都可以在需要的时候访问它们,但是我的直觉告诉我这是错误的(如果这是为什么呢?)
我希望有人能拿出一个聪明的办法来解决我的问题
发布于 2016-01-29 18:05:58
C#支持从多个接口继承,所以在第2层有这种隔离,对于额外的接口,这些类实现来执行特定的事情。
但是,我会从一个公共接口中派生出所有这些接口,并使用单个继承。
顺便说一下,签出IoC (反转控制)容器和MEF (托管扩展框架),包括在最近的.NET版本
https://stackoverflow.com/questions/35085560
复制相似问题