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
  }
}

FirstBarまたはSecondBarを作成する必要があることを知るために、データベースにアクセスする必要があるSecondFooを作成する必要があると想像してみてください。どうすればよいですか?SecondFooのコンストラクター内にデータソースを挿入しますか?サービスロケーター?createBarをIFooから移動しますか?

編集:ファクトリパターンの定義を探していません。createBarメソッドは「changeBar」や「doBusinessWithBar」のようなものである可能性があります。

4

1 に答える 1

2

FirstBarまたはSecondBarを作成する必要があることを知るためにデータベースにアクセスする必要があるSecondFooを作成する必要があると想像してみましょう。

を作成するか、を作成するかを決定するにSecondFooは、ある種の決定ロジックが必要なようです。そのロジックは、データベースアクセスの実装が本番環境で使用される戦略インターフェイスで除外できます。コンストラクターを介して戦略を注入できます。FirstBarSecondBar

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