`
阅读更多

近来发现很多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类实现如下:<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->

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();
    }
} 

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

分享到:
评论

相关推荐

    MVC中使用Repository模式vs2013

    一、在MVC中开发的时候,避免在Controllers中直接访问数据,为了构建更加适应未来变化以及更加易于测试的MVC应用程序,应使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了...

    使用通用Repository模式的CRUD操作的MVC程序例子

    本示例以"使用通用Repository模式的CRUD操作的MVC程序"为主题,旨在介绍如何在ASP.NET MVC项目中利用Repository模式进行数据访问层的设计和实现,以简化数据库操作并提高代码的可维护性。 Repository模式是一种设计...

    Repository模式与IOC的Autofac的完美融合数据操作展示实例

    Repository模式是一种设计模式,它将数据访问层的逻辑抽象出来,提供了一种统一的数据操作接口。在本项目中,Repository模式被用来隔离数据库操作,使得业务逻辑层与具体的数据存储方式解耦。这样做的好处是提高了...

    Dapper结合Repository模式的应用

    Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件。

    使用LINQtoSQL采用Repository模式实现三层架构.pdf

    使用LINQtoSQL采用Repository模式实现三层架构.pdf

    Laravel开发-repository

    在Laravel框架中,Repository模式是一种设计模式,用于在业务逻辑层和数据访问层之间创建一个抽象层。这种模式的主要目的是提高代码的可测试性、可维护性和解耦度。"Laravel开发-repository CRCMS存储库扩展了...

    Repository实例源码v1.0

    Repository模式是一种设计模式,它为应用程序提供了一个统一的接口,用于访问各种数据存储。这个模式在.NET开发中广泛应用于解耦业务逻辑层和数据访问层,使得代码更易于测试和维护。在这个"Repository实例源码v1.0...

    10.1-Repository

    在.NET Core开发中,Repository模式是一种常见的设计模式,它为应用程序提供了一种抽象的数据访问层。这个"10.1-Repository"项目很可能是为了演示或教学如何在.NET Core环境中实现这种模式。让我们深入探讨一下...

    NHibernate的Repository模式结合NVelocity模板引擎生成静态页面

    采用Repository企业模式。是一个NHibernate和NVelocity入门很好的例子。这里我只写了2层,也没用接口,仅仅是面向想学NHibernate的朋友。 使用vs2008和sql2k组合。数据库在app_data下。

    Laravel开发-l5-repository

    在Laravel框架中,"Laravel开发-l5-repository"是一个关于使用Repository模式进行数据库操作的项目。Repository模式是设计模式的一种,它提供了一个抽象层,使得业务逻辑与数据访问层解耦,增强了代码的可测试性和可...

    Repository-UOW-Sample-master_C#_

    标题中的"Repository-UOW-Sample-master_C#"表明这是一个关于C#编程语言的示例项目,主要涉及Repository模式和Unit of Work(工作单元)模式。Repository模式是设计模式中的一种,常用于数据访问层,它为业务逻辑层...

    NoIOCFramework(007控制台动态实例Repository调用模式,MiniProfiler10组1000次读写性能监视)

    《NoIOCFramework:探索控制台应用中的Repository模式与依赖注入》 在.NET Framework的开发环境中,框架、模式和依赖注入是构建可扩展、可维护系统的重要基石。本篇文章将深入探讨"NoIOCFramework"项目,它展示了...

    Repository实例源码.7z

    Repository模式是一种设计模式,它为数据访问层提供了一个抽象接口,隔离了具体的数据访问技术,如Entity Framework(EF)或NHibernate,使得业务逻辑层与数据访问层解耦。在这个"Repository实例源码.7z"压缩包中,...

    Laravel开发-repository-generator

    在Laravel框架中,Repository模式是一种常见的设计模式,用于实现业务逻辑层与数据访问层的解耦。Repository Generator是Laravel开发中的一个实用工具,它能够帮助开发者自动生成Repository类,从而快速构建应用的...

    Laravel开发-laravel-repository

    在Laravel框架中,Repository模式是一种设计模式,用于在业务逻辑层和数据访问层之间创建一个抽象层。这种模式有助于保持代码的整洁和模块化,同时也使得更换数据库或数据源变得更为简单。在这个"Laravel开发-...

Global site tag (gtag.js) - Google Analytics