通用泛型存储接口的设计
通用泛型存储接口的设计
Repository模式,在领域驱动设计中用的比较多,构建通用的存储接口,可以大大提高代码的重用,释放出更多的时间去处理核心业务。也就是说存储只依赖这些通用的存储接口即可完成基本存储操作,不需要去为每个业务存储去添加简单的增删改查。=》提取共性,关注个性。
存储接口设计:
/// <summary> /// 默认存储接口 /// </summary> /// <typeparam name="TEntity"> 模型对象 </typeparam> public interface IRepository<TEntity> where TEntity : IEntity { /// <summary> /// 存储上下文对象 /// </summary> IDataContext Context { get ; } }
可读存储接口设计:
/// <summary> /// 可读存储接口 /// </summary> /// <typeparam name="TEntity"> 模型类型 </typeparam> /// <typeparam name="TKey"> 模型主键类型 </typeparam> public interface IReadRepository<TEntity,TKey> : IRepository<TEntity> where TEntity:IEntity { /// <summary> /// 给定的主键的模型是否存在 /// </summary> /// <param name="key"> 主键 </param> /// <returns> 查询结果 </returns> bool Exists(TKey key); /// <summary> /// 获取单条模型对象 /// </summary> /// <param name="key"> 主键对象 </param> /// <returns> 查询值,未找到返回null </returns> TEntity GetSingle(TKey key); /// <summary> /// 获取所有模型记录集合 /// </summary> /// <returns> 结果集合 </returns> IEnumerable<TEntity> GetList(); }
可写存储接口设计:
/// <summary> /// 可写存储接口 /// </summary> /// <typeparam name="TEntity"> 模型类型 </typeparam> /// <typeparam name="TKey"> 模型主键 </typeparam> public interface IWriteRepository<TEntity,TKey>:IRepository<TEntity> where TEntity:IEntity { /// <summary> /// 新增模型对象到存储 /// </summary> /// <param name="entity"> 模型实例 </param> void Add(TEntity entity); /// <summary> /// 更新模型对象到存储 /// </summary> /// <param name="entity"> 模型实例 </param> void Update(TEntity entity); /// <summary> /// 从存储中删除模型对象 /// </summary> /// <param name="key"> 主键Key </param> void Delete(TKey key); }
具体存储接口示例:
/// <summary> /// 用户--数据存储接口 /// </summary> public interface IUserService : IRepository<User>,IWriteRepository<User, int >,IReadRepository<User, int > {
//个性化方法...
}
存储实现类示例:
public class SqlServerUserService : SqlServerRepositoryBase<User, int > , IUserService { public SqlServerUserService(IDataContext context) : base ((SqlServerRepositoryContext)context) { } }
通用接口方法实现类:SqlServerRepositoryBase
public abstract class SqlServerRepositoryBase<TEntity,TKey>:IRepository<TEntity>,IReadRepository<TEntity,TKey> , IWriteRepository <TEntity,TKey> where TEntity:IEntity, new () {}
分类: C#
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did45613