zoukankan      html  css  js  c++  java
  • 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();
        }
    } 

    上面只是为大家提供了一个最基本使用框架。

  • 相关阅读:
    298. Binary Tree Longest Consecutive Sequence
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    163. Missing Ranges
    336. Palindrome Pairs
    727. Minimum Window Subsequence
    211. Add and Search Word
    年底购物狂欢,移动支付安全不容忽视
    成为程序员前需要做的10件事
    全球首推iOS应用防破解技术!
  • 原文地址:https://www.cnblogs.com/super86/p/2940443.html
Copyright © 2011-2022 走看看