通用泛型存储接口的设计
通用泛型存储接口的设计
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://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did45613