我正在为一个项目进行设计,遇到了一个有趣的问题。
基本上,有一个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
}
}
这将是处理此问题的合适设计吗?我不确定如何搜索此问题,因为我不确定该术语是什么
答案 0 :(得分:1)
我认为拥有两个工厂,每个工厂针对每种功能类型,购买/出售,这不是一个坏主意。但是要保持它们独立。
即客户选择购买提供商A,然后选择卖方B。 因此,从工厂中,您分别可以获得正确的A和B买卖方。
如果您有兴趣阅读该模式,则建议使用该模式本质上是“策略”模式。我认为您可以将其与“模板方法”模式结合使用,以防所有提供者都需要遵循相同的步骤序列,但实现方式有所不同。