你忘记了你的SOLID原则,特别是依赖倒置
不要以某种方式定义你的接口,它特别期望一个具体的实现,比如,BuyStockOrder
或SellStockOrder
。
而是定义您的接口以期望像 一样的抽象CommandRequest
,然后您将发送具体的实现,CommandRequest
而无需更改您的接口。
然后你的Receiver
实施可以决定如何处理它,当然处理这个问题的正确方法是使用策略模式,但我将把它留给你。
下面是一些代码作为一个简单的例子:
public class Receiver : IReceiver
{
public CommandResult Process(CommandRequest request)
{
// Check the type of request and handle appropriately (or send to who can handle it)
return new Result();
}
}
public interface IReceiver
{
CommandResult Process(CommandRequest request);
}
public abstract class CommandResult
{
public bool Successful { get; set; }
}
public abstract class CommandRequest
{
}
public class Result : CommandResult
{
}
public class BuyStock : CommandRequest
{
public string Name { get; set; }
public decimal Value { get; set; }
}
public class SellStock : CommandRequest
{
public string Name { get; set; }
public decimal Value { get; set; }
}
internal class Program
{
private static void Main(string[] args)
{
var receiver = new Receiver();
var result = receiver.Process(new SellStock { Name = "PAYPL", Value = 100.20m });
Console.WriteLine(result.Successful ? "Yay!" : "Boo!");
}
}