Repository模式介绍汇总

1、Linq To Sql中Repository模式应用场景

http://www.cnblogs.com/zhijianliutang/archive/2012/02/24/2367305.html

http://tech.it168.com/a2011/1214/1288/000001288218_2.shtml

http://git.oschina.net/kuiyu/Repository-Demo

2、分享基于Entity Framework的Repository模式设计

http://www.cnblogs.com/JustRun1983/p/3307774.html

总结一下,Repository在实际使用中,有下面三种特点:

Repository的共同性

有一些公共的方法(增删改查), 这些方法无关于Repository操作的是哪个实体类,可以把这些方法定义成接口IRepository<TEntity>, 然后有个基类BaseRepository<TEntity>实现该接口的方法。

常见的方法,比如Find, Filter, Delete, Create等

Repository的差异性

每个Repository类又会有一些差异性,应当允许它们能够继承BaseRepository<TEntity>之外,还能够再扩展自己的一些方法。所以每个类都可以再定义一个自己特有的接口,定义一些属于自己Repository的方法。

Repository的协同性

不同的Repository可能需要协同,Repository对数据的修改,需要在统一的保存.

3、MVC架构中使用Respository模式实现统一的CRUD操作

http://www.cnblogs.com/guomingfeng/archive/2013/05/28/mvc-ef-repository.html

在数据库系统中,对于数据层来说,所有的操作归根结底无非“C(增加)、R(读取)、U(修改)、D(删除)”这四种操作。四种操作当中,与与业务相关度最大的是读取操作,根据各种不同的业务需求提交不同的查询,其最终执行应该放到业务层面中去进行,而增加,修改,删除这三种操作较为通用,可以作为通用数据操作封装到Repository中。在Repository中,唯一的变化点就是各种不同的实体类型,既然是变化点就应该进行封装,这里使用泛型来封装这个变化点。

4、MVC中使用Repository模式

微软MSDN有介绍:http://msdn.microsoft.com/zh-cn/dd408820 打开网站直接Ctrl+F搜索:使用 Repository 模式

在前面一节中,我们直接在一个控制器动作中使用了LINQ to SQL。我们直接从Index()控制器动作中使用了MovieDataContext类。对于一个简单的应用程序来说,这没有什么问题。然而,当你需要构建更加复杂的应用程序时,直接在控制器类中处理LINQ to SQL会造成一些问题。

在控制器类中使用LINQ to SQL会使以后切换数据访问技术时出现困难。举个例子,你可能想将Microsoft LINQ to SQL切换为使用Microsoft Entity Framework,来作为你的数据访问技术。在这种情况下,你需要在应用程序中重写每一个访问数据库的控制器。

在控制器类中使用LINQ to SQL也使得为应用程序创建单元测试更为困难。通常,在执行单元测试时,你不需要与数据库进行交互。你想要使用单元测试来测试你的应用程序逻辑,而非你的数据库服务器。

为了构建更加适应未来变化以及更加易于测试的MVC应用程序,你应该考虑使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了所有的数据访问逻辑。

当你创建repository类时,你创建了一个接口,该接口代表着所有由repository类所使用的方法。在你的控制器中,你针对接口编写代码,而不是针对repository。通过这种方式,你以后可以使用不同的数据访问技术来实现repository。

时间: 2024-11-13 08:45:57

Repository模式介绍汇总的相关文章

Java语言简单工厂创立性模式介绍

研究和使用创立性模式的必要性 面向对象的设计的目的之一,就是把责任进行划分,以分派给不同的对象.我们推荐这种划分责任的作法, 是因为它和封装(Encapsulation)和分派(Delegation)的精神是相符合的.创立性模式把对象的创立过程封装起来,使得创立实例的责任与使用实例的责任分割开, 并由专门的模块分管实例的创立,而系统在宏观上不再依赖于对象创立过程的细节. 所有面向对象的语言都有固定的创立对象的办法.Java语的办法就是使用new操作符.比如 StringBuffer s = ne

MVVM 模式介绍

本文讲的是MVVM 模式介绍, 我考察了一段时间安卓的数据绑定类库,决定尝试下它的"Model-View-ViewModel"模式.因为我曾经和 @matto1990 合作开发过一款应用 HackerNews Reader,所以我决定利用这种模式重新实现它. 这篇文章通过一款简单的App来论证MVVM模式,我建议你先看看这个项目,让你大概了解下它. 什么是MVVM模式? Model-View-ViewModel 就是将其中的 View 的状态和行为抽象化,让我们可以将UI和业务逻辑分开

使用Repository模式支持产品的客户化

  本篇博客简单描述了Repository模式在OEA中的应用. 不使用Repository时的问题     OEA框架中使用了DDD的思想,面向领域对象进行开发.在DDD中,有很多重要的概念,例如:聚合实体对象.值对象.仓储.工厂.服务等.(不太了解的Repository和DDD的朋友,可以看Evans写的<Domain Driven Design>.)     在OEA中,实体的实现框架使用了CSLA分布式框架.原来为了简单并保持和CSLA开发模式的兼容,一直都把实体的获取模式直接以静态方

关于Repository模式

原文:关于Repository模式 定义(来自Martin Fowler的<企业应用架构模式>): Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. 个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层

Entity Framework Repository模式

原文:Entity Framework Repository模式 Repository模式之前 如果我们用最原始的EF进行设计对每个实体类的"C(增加).R(读取).U(修改).D(删除)"这四个操作. 第一个:先来看看查询,对于实体类简单的查询操作,每次都是这样的过程会在代码中拥有大量的重复 极为类似的代码段. using (var db = new EFContext("EFContext")) { var persons = db.Persons.Where(

网易《魔兽世界》正式运营收费模式介绍

<魔兽世界>收费模式介绍 收费规则: <魔兽世界>按时间收费,每个小时收费9点.个别服务需要另外支付点数方能享受. 点卡种类和零售价格:点卡销售: 可以通过零售门店.网吧.电脑城.便利店等方式购买到,或者通过神州行卡兑换获得. 充值方式: 一.登陆通行证管理页面,选择魔兽世界,填写卡号.密码充值. 二.快速充值或者给他人充值,该功能稍后开放,敬请关注网站公告. 实体卡的主要特点:

MVC+LINQToSQL的Repository模式之(三)Repository模式实现统一CURD操作,实现EF中的Find主键查找

namespace Data.TEST { /// <summary> /// 数据通用操作实现 /// </summary> /// <typeparam name="TEntity"></typeparam> public class Repository<TEntity> : TESTRepositoryBase, IRepository<TEntity> where TEntity : class,IEnt

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

namespace Data.TEST{    /// <summary>    /// 数据操作基类    /// </summary>    public abstract class TESTRepositoryBase    {        /// <summary>        /// 数据库基类        /// </summary>        protected Entity.TEST.LinqTESTDataContext _db

MVC+LINQToSQL的Repository模式之(五)BLL层实现IOC

namespace Service {     public class Service<TEntity> : IService<TEntity> where TEntity : class,Entity.IEntity     {         private IRepository<TEntity> iRepository = null;         public Service()         {             iRepository = ne