通用泛型存储接口的设计
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#