近来发现很多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(); } }
上面只是为大家提供了一个最基本使用框架。
发表评论
-
平淡的2007
2007-12-24 08:04 817早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1416今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 892[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 639[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 783[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1148[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 929当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 836Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 845在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 696我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1189MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 705本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 839本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 761WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1062由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 800[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 692[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 737[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1108一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 950首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
一、在MVC中开发的时候,避免在Controllers中直接访问数据,为了构建更加适应未来变化以及更加易于测试的MVC应用程序,应使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了...
本示例以"使用通用Repository模式的CRUD操作的MVC程序"为主题,旨在介绍如何在ASP.NET MVC项目中利用Repository模式进行数据访问层的设计和实现,以简化数据库操作并提高代码的可维护性。 Repository模式是一种设计...
Repository模式是一种设计模式,它将数据访问层的逻辑抽象出来,提供了一种统一的数据操作接口。在本项目中,Repository模式被用来隔离数据库操作,使得业务逻辑层与具体的数据存储方式解耦。这样做的好处是提高了...
Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件。
使用LINQtoSQL采用Repository模式实现三层架构.pdf
在Laravel框架中,Repository模式是一种设计模式,用于在业务逻辑层和数据访问层之间创建一个抽象层。这种模式的主要目的是提高代码的可测试性、可维护性和解耦度。"Laravel开发-repository CRCMS存储库扩展了...
Repository模式是一种设计模式,它为应用程序提供了一个统一的接口,用于访问各种数据存储。这个模式在.NET开发中广泛应用于解耦业务逻辑层和数据访问层,使得代码更易于测试和维护。在这个"Repository实例源码v1.0...
在.NET Core开发中,Repository模式是一种常见的设计模式,它为应用程序提供了一种抽象的数据访问层。这个"10.1-Repository"项目很可能是为了演示或教学如何在.NET Core环境中实现这种模式。让我们深入探讨一下...
采用Repository企业模式。是一个NHibernate和NVelocity入门很好的例子。这里我只写了2层,也没用接口,仅仅是面向想学NHibernate的朋友。 使用vs2008和sql2k组合。数据库在app_data下。
在Laravel框架中,"Laravel开发-l5-repository"是一个关于使用Repository模式进行数据库操作的项目。Repository模式是设计模式的一种,它提供了一个抽象层,使得业务逻辑与数据访问层解耦,增强了代码的可测试性和可...
标题中的"Repository-UOW-Sample-master_C#"表明这是一个关于C#编程语言的示例项目,主要涉及Repository模式和Unit of Work(工作单元)模式。Repository模式是设计模式中的一种,常用于数据访问层,它为业务逻辑层...
《NoIOCFramework:探索控制台应用中的Repository模式与依赖注入》 在.NET Framework的开发环境中,框架、模式和依赖注入是构建可扩展、可维护系统的重要基石。本篇文章将深入探讨"NoIOCFramework"项目,它展示了...
Repository模式是一种设计模式,它为数据访问层提供了一个抽象接口,隔离了具体的数据访问技术,如Entity Framework(EF)或NHibernate,使得业务逻辑层与数据访问层解耦。在这个"Repository实例源码.7z"压缩包中,...
在Laravel框架中,Repository模式是一种常见的设计模式,用于实现业务逻辑层与数据访问层的解耦。Repository Generator是Laravel开发中的一个实用工具,它能够帮助开发者自动生成Repository类,从而快速构建应用的...
在Laravel框架中,Repository模式是一种设计模式,用于在业务逻辑层和数据访问层之间创建一个抽象层。这种模式有助于保持代码的整洁和模块化,同时也使得更换数据库或数据源变得更为简单。在这个"Laravel开发-...