リポジトリとサービス層の相互作用に関する質問

c# domain-driven-design repository-pattern service
リポジトリとサービス層の相互作用に関する質問

私は一般的なリポジトリインターフェイスを持っています、それは次のようなサービス層からの保存、読み取り、クエリのための通常の方法を持っています:

public interface IRepository
{
    T GetById(int id);
    void Save(T entity);
    void Update(T entity);
    void Delete(T entity);
    IEnumerable GetAll();
}

たとえば、タイプが「User」である「IRepository」の具体的な実装を使用するユーザーサービス(「IRepository」)がある場合、サービス自体が別の「IRepository」から何かを必要とする場合は「IRepository」サービスは IRepository`を直接呼び出すべきですか、それとも関連するサービス(つまり、主に IRepository`リポジトリを扱うサービス)を呼び出すべきですか?

結果をクライアントに返す前に特定のビジネスルールを適用したいが、一方でサービスが生の結果を処理したい場合など、アイテムをリポジトリから直接プルしている場合、私は個人的に問題を見ることができます結果に独自のルールを設定して適用するため、どの方向に進むべきか少し混乱しています。提案は大歓迎です。

  4  1


ベストアンサー

すべてのリポジトリの実装の詳細が同じ場合、おそらく次のような抽象的なBaseRepositoryを作成できます。

protected abstract class BaseRepo : IRepository
     where T : class
{
    #region IRepository Members

    // Implement all IRepository members here and make them public

    #endregion
}

次に、専用のAdminRepositoryを作成できます。次に例を示します。

public class AdminRepo : BaseRepo {}

別のリポジトリから呼び出すには、次のことができます。

public class UserRepo : BaseRepo
{
    private AdminRepo adminRepo = new AdminRepo();

    public UserRepo()
    {
        Admin person = adminRepo.GetById(1);
    }
}

それが役立つことを願います。

1


タイトルとURLをコピーしました