zoukankan      html  css  js  c++  java
  • 通用泛型存储接口的设计

    通用泛型存储接口的设计

    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#
  • 相关阅读:
    HDU 3848 CC On The Tree 树形DP
    编程求取直线一般式表达式,两直线交点
    向外国学者所要论文源代码--英语模版
    找出该树中第二小的值--思路及算法实现
    不使用额外空间交换2个数据的源代码
    华为2018软件岗笔试题解题思路和源代码分享
    华为笔试题--LISP括号匹配 解析及源码实现
    Linux 快捷键汇总(偏基础)
    快速排序算法思路分析和C++源代码(递归和非递归)
    Python读取SQLite文件数据
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3095321.html
Copyright © 2011-2022 走看看