Events 如何构造许多类似事件的方法?

Events 如何构造许多类似事件的方法?,events,design-patterns,class-design,Events,Design Patterns,Class Design,我正在开发的一个系统的中心目标是变得有点太笨拙了。问题是,它可以通过许多不同的方式采取行动。你可以: 取消它 否认 丢弃它 卖掉它 分开 过期 ... 还有更多。 我正在考虑将这些类似事件的方法从类中分解出来,使其更通用一些,比如命令模式。但是大多数方法都有不同的参数,所以使用像Run或Execute这样的解决方案可能会有问题 你有什么想法来组织这个,使它灵活和简单,以添加新的命令,动作或你想叫他们什么?因为没有监听器,所以我不会称它们为真实事件。您能在它们的构造函数中传递命令所需的参数吗?这样

我正在开发的一个系统的中心目标是变得有点太笨拙了。问题是,它可以通过许多不同的方式采取行动。你可以:

取消它 否认 丢弃它 卖掉它 分开 过期 ... 还有更多。 我正在考虑将这些类似事件的方法从类中分解出来,使其更通用一些,比如命令模式。但是大多数方法都有不同的参数,所以使用像Run或Execute这样的解决方案可能会有问题


你有什么想法来组织这个,使它灵活和简单,以添加新的命令,动作或你想叫他们什么?因为没有监听器,所以我不会称它们为真实事件。

您能在它们的构造函数中传递命令所需的参数吗?这样,就可以使用无参数命令

class SellItCommand : ICommand {

  private decimal price;

  SellItCommand(decimal price) {
    this.price = price;
  }

  void Execute() {
    // Do whatever needs to be done with in the sell command using this.price
  }
}

将参数封装为单个参数:

public class SellCommand: Command {
   Product OwnerProduct;

   ProductCommand (AOwnerProduct)
   {
     this.OwnerProduct = AOwnerProduct;
   }

   public override void Execute(KeyValueArray Parameters)
   {
      double Price = (double)Parameters.ValueofKey("price");
      // do something else
   }
}

public class BuyCommand: Command {
   Product OwnerProduct;

   ProductCommand (AOwnerProduct)
   {
     this.OwnerProduct = AOwnerProduct;
   }

   public override void Execute(KeyValueArray Parameters)
   {
      double Cost = (double)Parameters.ValueofKey("cost");
      // do something else
   }
}


public class Product {
   public void AnyMethod()
   {
     KeyValueArray Parameters =  new KeyValueArray Parameters();
     KeyValueArray.Add("price", "12.5");
   } 
}

这是一种伪代码,您可能喜欢使用与您的编程框架相匹配的集合库。

是的,我正在考虑。所以我最终会有很多小的不可变类做一件事?有什么优点/缺点吗?嗯,缺点是类爆炸的风险,优点是,每个类做一件事,维护起来会更容易。如果没有对系统的更多了解,很难判断命令模式是否存在需要注意的问题。