📅  最后修改于: 2023-12-03 15:12:15.662000             🧑  作者: Mango
路线中的工匠命令(Command-Query Separation Pattern)是一种软件设计模式,它强调对查询(查询)和命令(命令)的明确区分。在C#中,该模式可以通过接口,委托和lambda表达式实现。
public interface ICommand
{
void Execute();
}
public interface IQuery<out TResult>
{
TResult Execute();
}
public class ConcreteCommand : ICommand
{
private readonly string _message;
public ConcreteCommand(string message)
{
_message = message;
}
public void Execute()
{
Console.WriteLine(_message);
}
}
public class ConcreteQuery : IQuery<string>
{
public string Execute()
{
return “Hello World”;
}
}
在上面的示例中,我们定义了两个接口ICommand和IQuery,它们都是接受无参数和返回void或者TResult的方法。然后我们定义了从接口派生的具体实现。ConcreteCommand实现了ICommand,执行它自己的方法并打印出一条消息。ConcreteQuery实现了IQuery
public delegate void Command();
public delegate TResult Query<out TResult>();
public class AnotherConcreteCommand
{
public void Execute()
{
Console.WriteLine(“Hello World”);
}
}
public class AnotherConcreteQuery
{
public string Execute()
{
return “Hello World”;
}
}
以上代码示例中,我们定义了Command和Query委托类型,它们都是无参数委托,一个返回void,一个c放回TResult。然后我们定义另一个具体实现AnotherConcreteCommand和AnotherConcreteQuery。AnotherConcreteCommand实现了 Command委托,执行自己的方法并打印出一条消息。AnotherConcreteQuery实现了Query
public class LambaCommandQuery
{
public static Func<int, int> LambdaQuery = (x) => x * 2;
public static Action<string> LambdaCommand = (message) =>
{
Console.WriteLine(message);
};
}
在上面的示例中,我们定义了LambdaQuery和LambdaCommand,它们分别是Func<int, int>和Action
在C#中实现路线中的工匠命令模式的方法有很多种。我们可以通过接口,委托和lambda表达式等方式实现它。任何一种方式都可以帮助我们更好地实现命令和查询之间的分离,让软件变得更加可维护和可扩展。