通用泛型存储接口的设计

通用泛型存储接口的设计

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#
原文地址:https://www.cnblogs.com/Leo_wl/p/3095321.html