10

モデル、リポジトリ、サービス、コントローラー、場合によってはビューモデル、およびビューのレイヤーに分離された ASP.Net MVC 3 Web アプリケーション (EF 4.1) に取り組んでいます。

今私の質問はベストプラクティスの1つです。別のエンティティにアクセスする必要があるエンティティ サービス クラスは、そのサービスまたはそのリポジトリを使用する必要があります。たとえば、エンティティ A のサービス メソッドが、エンティティ A の作成時にエンティティ B を更新する必要があるとします。A のサービス クラスは B のリポジトリまたはサービス レイヤーを使用する必要がありますか? どちらも可能ですが、ベストプラクティスは何ですか? 個人的には、サービスが別のサービスにアクセスすることを好みます。そうすれば、いわばより進化したメソッドへのアクセスとなります。

4

3 に答える 3

5

別のサービスからのビジネスロジックも必要になる場合があるため、サービスクラス間で呼び出すことをお勧めします。ただし、循環依存を避けるように注意してください。可能性のある循環依存を回避するのに役立つ依存性注入を使用することをお勧めします。また、サービス クラスのインターフェイスを作成し、クライアント クラスからこのインターフェイスを使用することも検討してください (具体的な実装をコンストラクターに渡します)。

次に、あなたの SeriesA は次のようになります。

class ServiceA : IServiceA
{
    public ResultA Method1() { //some logic };
    public void Method2() { //some logic };
}

ServiceA に依存する ServiceB。

class ServiceB: IServiceB
{
   private IServiceA _serviceA;
   public ServiceB(IServiceA serviceA)
   {
      _serviceA = serviceA;
   }

    public ResultB Method()
    {
         var result = _serviceA.Method1();
         // get result from service A and create and return result for service B
    }
}
于 2012-07-24T07:41:26.510 に答える
1

私は、この種の決定に一般的に使用される原則と慣行に頼る傾向があります。ここでは DRY (Don't Repeat Yourself) と KISS (Keep It Simple, Stupid) が当てはまるかもしれません。

エンティティ B のサービス クラスをバイパスした結果として何らかのロジックを繰り返す必要がない限り、エンティティ B のリポジトリをエンティティ A のサービス クラスから直接呼び出します。

これは些細なことですが、関連するクラスが 1 つ少ないことを意味し (ServiceClassA > ServiceClassB > RepositoryClassB ではなく ServiceClassA > RepositoryClassB)、私の考えではより単純なソリューションになります。

HTH

于 2012-07-23T12:29:11.503 に答える