3

我正在尝试将我的业务逻辑从我的服务类和控制器中移出,并将其放在我的业务类中。

public interface IFoo{
  IBar CreateBar(creationParameters);
}
public class FirstFoo : IFoo{
  IBar CreateBar(creationParameters){
    return new FirstBar(creationParameter.Id);
  }
}
public interface IBar{
  void DoSomething();
}
public class FirstBar : IBar{
  FirstBar(int id){...}
  void DoSomething(){
    //well... do something
  }
}
public class SecondBar : IBar{
  FirstBar(int id){...}
  void DoSomething(){
    //well... do something else
  }
}

假设我需要创建一个 SecondFoo,它需要访问数据库才能知道它必须创建一个 FirstBar 或 SecondBar,我该怎么做?我在 SecondFoo 的构造函数中注入了我的数据源?服务定位器?我将 createBar 移出 IFoo 吗?

编辑:我不是在寻找工厂模式的定义,createBar 方法可能类似于“changeBar”或“doBusinessWithBar”。

4

1 回答 1

2

假设我需要创建一个 SecondFoo ,它需要访问数据库才能知道它必须创建一个 FirstBar 或一个 SecondBar

似乎SecondFoo需要某种决策逻辑来决定是创建 aFirstBar还是SecondBar. 该逻辑可以在策略接口中分解出来,其中数据库访问实现将在生产中使用。您可以通过构造函数注入策略。

IBar CreateBar(creationParameters) {
  if (strategy.ShouldCreateFirst(creationParameters)) {
    return new FirstBar(creationParameter.Id);     
  }  
  else {
    return new SecondBar(creationParameter.Id);     
  }
}
于 2012-04-12T14:39:07.130 回答