在项目中应用Repository模式
2015-06-02 09:21
330 查看
近来发现很多ASP.NET MVC的例子中都使用了Repository模式,比如Oxite,ScottGu最近发布的免费的ASP.NET MVC教程都使用了该模式。就简单看了下。在《企业架构模式》中,译者将Repository翻译为资源库。给出如下说明:
通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调。在《领域驱动设计:软件核心复杂性应对之道》中,译者将Repository翻译为仓储,给出如下说明:
一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合。使用该模式的最大好处就是将领域模型从客户代码和数据映射层之间解耦出来。我们来看下在LinqToSql中如何应用该模式。
1. 我们将对实体的公共操作部分,提取为IRepository接口,比如常见的增加,删除等方法。如下代码:
原文:http://www.cnblogs.com/carysun/archive/2009/03/20/repository.html
通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调。在《领域驱动设计:软件核心复杂性应对之道》中,译者将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(); } }上面只是为大家提供了一个最基本使用框架。作者:生鱼片 出处:http://carysun.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文:http://www.cnblogs.com/carysun/archive/2009/03/20/repository.html
相关文章推荐
- ASP.NET MVC Razor视图引擎攻略
- 关于项目架构——零碎手记
- 领域驱动设计的标准分层架构
- 领域驱动设计基本理论知识总结
- Fluent NHibernate
- 领域驱动设计(Domain Driven Design)参考架构详解
- DDD、Repository、Factory百家争鸣
- 在ASP.NET MVC中实现大文件异步上传
- FileUpload控件无法获取包含路径的文件名?
- C#获取项目程序及运行路径的方法
- 使用FFmpeg和mencoder将视频转换为flv格式
- ffmpeg转换参数和对几种视频格式的转换分析
- pl sql developer 注释乱码解决方案
- .Net DES加密解密(不带向量)
- C# 创建Windows服务。服务功能:定时操作数据库
- 待产包准备清单—宝宝用品
- 待产包准备清单—入院物品
- 世界十大婴儿用品品牌排行榜
- ctime头文件
- vlc-android 中调用用libvlcjni.so实现流媒体播放