2

ここで少しアドバイスを求めているので、正しい方向に進みます。

次のような 1 つのサービスですべてのビジネス機能を実行する 1 つのサービスがありました。

TestingService
      GetProducts()
      GetPeople()

今、私のシステムが成長しているので、これらを分割したいので、次のように感じています。

ProductService
    GetProducts()
PeopleService
    GetPeople()

同じプロジェクトに 2 つの .svc ファイルを持ち、それぞれを個別に呼び出すのが最善の方法ですか? うまく機能するリポジトリ パターンを実装しました。現在は IProductService と IPeopleService があります。これを行う場合、コントローラーで両方のコンストラクターを使用すると、次のようになります。

public TestController(IProductService productService, IPeopleService service)

それよりも

public TestController(ITestService service)

もともと持っていたもの。

1 つのコントローラーで 5 つのサービスを使用している場合、どれが扱いにくくなる可能性がありますか? これは、サービスレベルのラッパーとして Factory クラスが使用されるものですか?

4

1 に答える 1

3

コントローラーではなく、リポジトリ クラスにサービスを配置する必要があると思います。このようなもの:

public TestRepository(IProductService productService)  {}

あなたが言及したより詳細なアプローチを選択した場合、1 つの大きなサービスではなく、多くのサービスが用意されます。これは良い考えです。また、コントローラー/リポジトリ/サービスの間に 1 対 1 対 1 の関係がある場合、適切で保守しやすい構造になります。

ただし、関係が 1 対多の場合、ファクトリ アプローチは確かにオプションです。多分これらの線に沿った何か:

// Factory
     public class ServiceFactory : IServiceFactory
        {
         public IProductService GetProductService()
            {
                return new ProductService();
            }
         public IPeopleService GetPeopleService ()
            {
                return new PeopleService ();
            }
          }

// Repository
    public class ProductRepository
        {
        public void DoSomething()
        {
            // use dependecy injection to avoid this tight coupling
            var factory = new ServiceFactory(); 
            var service = factory.GetProductService();
            service.DoMyStuff();
        }

}
于 2012-11-19T18:25:03.780 に答える