Ich möchte einen eleganteren und wertvolleren Weg finden, um Prozessoren in den CommandProcessorDispatcher
Unterricht zu bringen. Oder es kann eine andere Lösung sein (das Ziel ist es, jede Befehlsverarbeitungslogik von einer unabhängigen Klasse zu trennen). Vielleicht kann hier ein Designmuster nützlich sein.
public interface ICommand { }
public class StartCommand : ICommand { }
public class StopCommand : ICommand { }
public interface ICommandProcessor<in T> where T : ICommand
{
void Process(T command);
}
public class StartCommandProcessor : ICommandProcessor<StartCommand>
{
public void Process(StartCommand command) { }
}
public class StopCommandProcessor : ICommandProcessor<StopCommand>
{
public void Process(StopCommand command) { }
}
public interface ICommandProcessorDispatcher
{
void Process(ICommand command);
}
public class CommandProcessorDispatcher : ICommandProcessorDispatcher
{
public CommandProcessorDispatcher(Dictionary<Type, Action<ICommand>> processors)
{
_processors = processors;
}
private readonly Dictionary<Type, Action<ICommand>> _processors;
public void Process(ICommand command)
{
_processors[command.GetType()](command);
}
}
internal class Program
{
private static void Main(string[] args)
{
var dict = new Dictionary<Type, Action<ICommand>>
{
{ typeof(StartCommand), x => new StartCommandProcessor().Process((StartCommand)x) },
{ typeof(StopCommand), x => new StopCommandProcessor().Process((StopCommand)x) },
};
var dispatcher= new CommandProcessorDispatcher(dict);
}
}
ICommand
wird mit diesen Technologien definiert und ausgiebig genutzt, daher ist es schwierig, dies von meinem Verstand zu trennen. Was ist das Endziel? Vielleicht könnte das zugrunde liegende Konzept etwas verfeinert werden.