近来发现很多ASP.NET MVC的例子中都使用了Repository模式,比如Oxite,ScottGu最近发布的免费的ASP.NET MVC教程都使用了该模式。就简单看了下。

在《企业架构模式》中,译者将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();
    }
}

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

转载于:https://www.cnblogs.com/sandea/p/3289942.html

Repository模式(转载)相关推荐

  1. 分享基于EF6、Unitwork、Autofac的Repository模式设计

    目录 分享基于EF6.Unitwork.Autofac的Repository模式设计 一.实现的思路和结构图 二.Repository设计具体的实现代码 三.Repository设计的具体的使用 四. ...

  2. Repository模式

    近来发现很多ASP.NET MVC的例子中都使用了Repository模式,比如Oxite,ScottGu最近发布的免费的ASP.NET MVC教程都使用了该模式.就简单看了下. 在<企业架构模 ...

  3. Repository模式与UnitOfWorks模式的运用

    软件开发就像是一个江湖,而设计模式就是一本高深的秘籍每读一次.用一次.想一次都能得到新的领悟,让我们的设计技能有所提高.开始时我们可能会"为了模式而模式",让代码变得乱78糟甚至难 ...

  4. MVC架构中的Repository模式 个人理解

    关于MVC架构中的Repository模式 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提 ...

  5. MVC+LINQToSQL的Repository模式之(二)数据基类

    namespace Data.TEST {     /// <summary>     /// 数据操作基类     /// </summary>     public abs ...

  6. 分享基于Entity Framework的Repository模式设计(附源码)

    关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...

  7. 基于NHibernate的UnitOfWork+Repository模式(AutoFac)–Part2

    非常感谢各位在之前comment中提出的意见..确实Razor语法介绍的文章错别字太多,影响大家阅读. 前面的文章介绍了如何在asp.net中中UnitOfWork模式以及Repository模式的使 ...

  8. java repository模式_MVC架构中的Repository模式 个人理解

    个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问.Reposit ...

  9. 对Repository模式误用的反思和纠正

    一直以来想自己做一套开发框架,在其基础上进行快速开发,自从接触微软的MVC框架和Entityframework以来,阅读了大量园子里的相关的技术文章,也进行了不少摸索和尝试,中间经历了多次大刀阔斧的重 ...

最新文章

  1. 菜鸟报告——多线程操作实例
  2. 哀悼日使站点变灰色调的方法
  3. Know more about CBO Index Cost
  4. [Python人工智能] 二十三.基于机器学习和TFIDF的情感分类(含详细的NLP数据清洗)
  5. windows下部署免费ssl证书(letsencrypt)
  6. 数据库 数据库SQL语句一
  7. 浅析jQuery中常用的元素查找方法总结
  8. c语言给定一个非空整数数组_C程序检查给定整数的所有位是否为一(1)
  9. CSC 121, 122.. MAT 181, 182, 252, 271, 281, 474.. ECN 272, 273, 372, 472
  10. java 反射 调用私有构造函数_使用反射调用私有方法
  11. JSK-19 加一【入门】
  12. iPython的安装过程
  13. 【sketchup 2021】草图大师的编辑工具2【路径跟随、偏移与轴、卷尺工具和尺寸、绘制参考线】
  14. 利用高德云图开发附近的人功能
  15. Secondary NameNode:究竟是什么?
  16. 【转】win7 uac关闭
  17. Seaborn系列(二):关系绘图
  18. 企业微信发送图片失败
  19. 2015年:跑步计划
  20. 【Vue】- created()方法

热门文章

  1. pyqt5知识:如何接受密码输入?
  2. QT5运行错误:ImportError: cannot import name QAxContainer from PyQt5 解决
  3. bus.js非父子组件之间通讯
  4. dell电脑重装系统no bootable devices found
  5. sess.run()详解
  6. java继承和引用_浅谈Java继承、传递
  7. mybatis学习3之分页的实现
  8. mysql linux版本 rpm_Linux下查看MySQL版本及rpm里有没有MySQL
  9. python的xpath用法_python之Xpath语法
  10. mysql触发器 存储过程_mysql触发器和存储过程