如何处理多个工厂

时间:2019-01-08 03:03:48

标签: c# asp.net .net oop factory-pattern

我正在为一个项目进行设计,遇到了一个有趣的问题。

基本上,有一个Web表单可让某人为我的调度程序服务创建新作业。表单将包含以下属性:

购买交易所
卖出交易所

为此,我们为以下每个字段提供了

购买交易所:Exchange1,Exchange 2 卖方交易:SellExchange1,SellExchange2

我应该能够从表单中选择“买入交易”或“卖出交易”,但是在域模型中“买入交易”或“卖出交易”之间没有明确的关系

我当前的设计是在创建新作业时让调度程序服务调用工厂,该工厂将为所选的Buy Exchange实例化提供程序。这两个提供程序都将实现一个包含Sell()方法的接口。

我的问题是,我应该使用第二家工厂进行销售交易吗?该交易将由接口sell方法调用吗?由于两种销售方式的“销售”逻辑都会有所不同,我想知道是否有特定的设计模式?

这是我设计的一些快速伪代码

public interface IExchangeFactory()
 { 
   // Create Exchange 1 or Exchange 2
 }

public class ExchangeFactory : IExchangeFactory
 {
    // Either return Exchange 1 or Exchange 2 provider
 }

 public class SellExchangeFactory : IExchangeFactory
 {
    // Either return Sell Exchange 1 or Sell Exchange 2 provider
 }

 public class Exchange1Provider : IExchange1Provider
  { 
    public void PerformPurchase(){
      { 
         // Purchase Logic Here
      }

     public void Sell()
      {
        // Instantiate Sell Exchange chosen in form

      }
}

public class Exchange2Provider : IExchange2Provider
  { 
    public void PerformPurchase(){
      { 
         // Purchase Logic Here
      }

     public void Sell()
      {
        // Use sell exchange factory to instantiate sell exchange provider
      }
}

这将是处理此问题的合适设计吗?我不确定如何搜索此问题,因为我不确定该术语是什么

1 个答案:

答案 0 :(得分:1)

我认为拥有两个工厂,每个工厂针对每种功能类型,购买/出售,这不是一个坏主意。但是要保持它们独立。

即客户选择购买提供商A,然后选择卖方B。 因此,从工厂中,您分别可以获得正确的A和B买卖方。

如果您有兴趣阅读该模式,则建议使用该模式本质上是“策略”模式。我认为您可以将其与“模板方法”模式结合使用,以防所有提供者都需要遵循相同的步骤序列,但实现方式有所不同。