好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

通用泛型存储接口的设计

通用泛型存储接口的设计

通用泛型存储接口的设计

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/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于通用泛型存储接口的设计的详细内容...

  阅读:53次

上一篇: NSubstitute完全手册索引

下一篇:重构之践