• 通用泛型存储接口的设计


    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()
        {}
  • 相关阅读:
    JSON.stringify()学习
    【EntityFramework学习笔记】为什么要使用迁移
    使用Telerik的DataPager进行服务器端分页(改进版)
    使用Telerik的DataPager进行服务器端分页
    使用MVVM写的WPF分页控件
    【PostgreSQL】PostgreSQL的安装
    【Telerik】<telerik:RadGridView/>控件的使用
    【PostgreSQL】PostGreSQL数据库,时间数据类型
    WCF的同步和异步(以WPF连接为例)
    【WPF】绑定数据
  • 原文地址:https://www.cnblogs.com/KingLei/p/3094940.html
Copyright © 2020-2023  润新知