ASP.NET MVCの例ではいずれもRepositoryモードが使用されている

4265 ワード

Asp.NetMVC controllerの最下層には、repositoryやservice layerという論理的な層がよく登場しますが、それらはいったいどんな違いなのでしょうか.
 
簡単に言えば
repositoryは、データを管理するCRUD(Create,Read,Update,Delete)を担当するデータ永続層です.
Servicelayerはビジネスロジック層であり、repository層にアクセスする必要があることが多いが、データがどのように取得され、格納されているかには関心がない.
 
 
多くのASPを発見しましたNET MVCの例では、Oxite、ScottGuが最近発表した無料のASP.のようなRepositoryモードが使用されている.NET MVCチュートリアルでは、このモードが使用されています.簡単に見ました.
Enterpriseスキーマ・モデルでは、翻訳者はRepositoryをリポジトリに翻訳します.レルムオブジェクトにアクセスするために使用される類似の集合のインタフェースによって、レルムとデータマッピングレイヤとの間で調整されることを説明します.
「領域駆動設計:ソフトウェアコア複雑性対応の道」では、翻訳者はRepositoryを倉庫に翻訳し、ストレージをカプセル化し、動作を読み取り、検索するメカニズムであり、オブジェクトの集合をシミュレートしていることを示しています.
このモードを使用する最大の利点は、レルムモデルをクライアントコードとデータマッピングレイヤとの間からデカップリングすることです.
LinqToSqlでこのモードをどのように適用するかを見てみましょう.1.一般的な追加、削除などの方法で、エンティティの共通の操作部分をIrepositoryインタフェースとして抽出します.次のコードがあります.
interface IRepository<T> where T : class

{

    IEnumerable<T> FindAll(Func<T, bool> exp);

    void Add(T entity);

    void Delete(T entity);

    void Save();

}

2.次に、上記のインタフェースを具体的に実装するための汎用クラスを実装する方法を説明する.
public class Repository<T> : IRepository<T> where T : class

{

    public DataContext context;

    public Repository(DataContext context)

    {

        this.context = context;

    }

    public IEnumerable<T> FindAll(Func<T, bool> exp)

    {

        return context.GetTable<T>().Where(exp);

    }

    public void Add(T entity)

    {

        context.GetTable<T>().InsertOnSubmit(entity);

    }

    public void Delete(T entity)

    {

        context.GetTable<T>().DeleteOnSubmit(entity);

    }

    public void Save()

    {

        context.SubmitChanges();

    }

}

3.上記の実装は、各エンティティに共通の操作ですが、実際には、各エンティティには自分のビジネスに合致する論理があります.別のインタフェースを個別に定義します.たとえば、次のようにします.
interface IBookRepository : IRepository<Book>

{

    IList<Book> GetAllByBookId(int id);

}

4.最後に、エンティティのRepositoryクラスは次のように実装されます.
public class BookRepository : Repository<Book>, IBookRepository

{

    public BookRepository(DataContext dc)

        : base(dc)

    { }

    public IList<Book> GetAllByBookId(int id)

    {

        var listbook = from c in context.GetTable<Book>()

                       where c.BookId == id

                       select c;

        return listbook.ToList();

    }

} 

上は、最も基本的な使用フレームワークを提供しています.
作成者:
刺身
    
出典:
http://carysun.cnblogs.com/
    
本文の著作権は著者とブログ園に共有され、転載を歓迎するが、著者の同意を得ずにこの声明を保留し、文章のページの明らかな位置で原文の接続を与えなければならない.そうしないと、法律責任を追及する権利を保留する.