0

を使用してASP.NET MVC 3います。

リポジトリ層でどれだけのことが起こるかについて、私はまだ混乱しています。私は常に、必要なことだけを行う必要があり、それ以上のことは何もしないという仮定の下にありました.

私は常に、リポジトリ レイヤーを呼び出すサービス レイヤーを使用してきました。アイテムのリストを取得するだけの場合でも、リポジトリ レイヤーに対応するサービス レイヤーと、リポジトリ メソッドに対応するサービス レイヤー メソッドが常にありました。したがって、次のサービス層があります。

public class UnitService : IUnitService
{
     private readonly IUnitRepository unitRepository;

     public UnitService(IUnitRepository unitRepository)
     {
          this.unitRepository = unitRepository;
     }

     public IEnumerable<Unit> GetAll()
     {
          return unitRepository.GetAll();
     }
}

これは私のリポジトリ層がどのように見えるかです:

public class UnitRepository : IUnitRepository
{
     // Partial code

     public IEnumerable<Unit> GetAll()
     {
          return DbContext.Units
               .Include("Department")
               .OrderBy(x => x.Name);
     }
}

本当に必要でない場合は、サービス層クラスを削減しようとしています。では、サービス レイヤーではなく、コントローラーからリポジトリを呼び出すだけでよいでしょうか? 自分のやり方でやるかどうかは本当に重要ですか?つまり、まだすべてのデータが戻ってきます。

キャッシングとロギングはどこで行いますか? サービスレイヤーまたはリポジトリ内? GetAll メソッドが、キャッシュする必要のある大量のレコードを返すとしましょう。これをリポジトリにキャッシュしますか、それともサービス層が必要ですか?

ロギングについても同様です。次のようなログはどこに記録しますか。

Log.Info("Adding category: {0}, {1}", entity.Id, entity.Name);
// adding code
Log.Info("Category added: {0}, {1}", entity.Id, entity.Name);
4

1 に答える 1

0

サービス レイヤー メソッドが呼び出しを基になるリポジトリ メソッドに委譲するだけの場合は、そうです。このサービス レイヤーには付加価値がないため、このサービス レイヤーを削除して、コントローラーからリポジトリを直接使用してもまったく問題ありません。

キャッシングとロギングはどこで行いますか? サービスレイヤーまたはリポジトリ内? GetAll メソッドが、キャッシュする必要のある大量のレコードを返すとしましょう。これをリポジトリにキャッシュしますか、それともサービス層が必要ですか?

キャッシングはデータ層で行う必要があります。データ アクセスの方法によっては、NHibernate などの ORM には既に 2 次キャッシュが含まれているため、それを有効にするだけで済みます。

ロギングに関する限り、何かをロギングする必要があるアプリケーションのすべてのレイヤーでそれを行うことができます。

于 2012-07-13T06:53:56.107 に答える