近来发现很多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 786早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1384今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 851[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 600[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 740[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1105[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 883当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 808Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 810在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 664我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1139MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 671本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 776本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 722WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1025由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 766[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 660[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 698[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1072一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 911首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
一、在MVC中开发的时候,避免在Controllers中直接访问数据,为了构建更加适应未来变化以及更加易于测试的MVC应用程序,应使用Repository模式。当你使用Repository模式时,你会创建一个独立的repository类,它包含了...
使用LINQtoSQL采用Repository模式实现三层架构.pdf
使用通用Repository模式的CRUD操作的MVC程序例子
Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件。
项目说明: Repository模式的框架数据模型和表字段的一一对应 AutoFac框架依赖注入 jquery datatable完美展示 记得看说明文件和建表哦
采用Repository企业模式。是一个NHibernate和NVelocity入门很好的例子。这里我只写了2层,也没用接口,仅仅是面向想学NHibernate的朋友。 使用vs2008和sql2k组合。数据库在app_data下。
Repository 模式是架构模式,在设计架构时,才有参考价值。应用 Repository 模式所带来的好处,远高于实现这个模式所增加的代码。只要项目分层,都应当使用这个模式。这样做有几个好处:把数据处理逻辑分离使得代码...
7.2.1 Repository模式 7.2.2 Data Access Objects模式 7.3 数据访问模式 7.3.1 Unit of Work模式 7.3.2 数据并发控制 7.3.3 Lazy Loading和Proxy模式 7.3.4 Identity Map模式 7.3.5 Query Object模式 7.4 ...
GenericRepository项目是.NET中Repository模式的通用实现。 有关详细讨论,请参见项目的Wiki页面,尤其是 。 轻巧的 它是域模型和数据映射器(例如NHibernate,Linq2Sql或Entity Framework等ORM)之间的轻量级薄层。...
这是一个旨在使用存储库模式帮助人们使用其持久层的项目。 该层建立在Android OrmLite( )之上,并且仍在开发中。 设置 首先,您必须设置在本地AndroidStudio或本地Nexus Sonatype中运行的项目。 您应该将其用作主...
仓库信息库
受Bosnadev / Repository软件包启发的存储库设置。 该软件包是该软件包的扩展,调整(但完全独立)的版本,具有自己的接口。 Bosnadev存储库的主要区别在于,该库能够处理对同一存储库实例的重复和变化的调用,而...
Repository设计模式介绍[归纳].pdf
用于记录IOC依赖倒置的演变过程,相信能更详细更深切的体会到IOC的转变之路
查看版本: / 迁移至: / 您想了解更多有关Repository模式的信息吗? 。目录作曲家Laravel方法仓库接口RepositoryCriteriaInterface CacheableInterface PresenterInterface 条件接口用法建立模型创建一个仓库发电机...
先看博客 先看博客 先看博客 1.实现EFcore连接本地Mysql数据库 2.最新版本的ASP.NET.CORE.Web API 3.实现dbfrist和code 。...Entity Framework Core.SqlServer //这个连接sqlsever需要 pomelo.Entity Framework Core...
mvc,linq,Repository模式 网站源码。 程序员天空 地址:http://www.codersky.net
通过repository模式对关系数据库系统(RDBMS)的简单封装,并提供view_model实现,无需编写代码即可实现对数据的增删改查。 主界面 菜单 新建 修改 详情 准备 获取awtk并编译 git clone ...
存储库层 (Repository Layer) (Repository 模式 实现) 业务逻辑层 (Business Logic Layer) 表示层 (Presentation Layer) (MVP (Model - View - Presenter) 模式 实现) 组件层 (Component Layer) 底层使用技术: 01....
存储库层 (Repository Layer) (Repository 模式 实现) 服务层 (Service Layer) 表示层 (Presentation Layer) (MVP (Model - View - Presenter) 模式 实现) 底层使用技术: 01. 控制反转 (Inversion of Control) ...