在写完仓储接口的改造改造后,总觉得有个代码的坏味道,这种味道源于它的DRP,即重复的代码太多了,即异步操作和同步操作其实只是在insert,update和delete上有所不同,获取数据的方法都是一样的,所以,我最后决定,将异步的接口进行改造,让它更加合理,方法后都加上Async的后缀,看上去也更像是个异步方法,呵。
改造后的异步接口
/// <summary> /// 异步操作 /// 基础的数据操作规范 /// 与ORM架构无关 /// </summary> /// <typeparam name="TEntity"></typeparam> public interface IRepositoryAsync<TEntity> where TEntity : class { /// <summary> /// 添加实体并提交到数据服务器 /// </summary> /// <param name="item">Item to add to repository</param> Task InsertAsync(TEntity item); /// <summary> /// 移除实体并提交到数据服务器 /// 如果表存在约束,需要先删除子表信息 /// </summary> /// <param name="item">Item to delete</param> Task DeleteAsync(TEntity item); /// <summary> /// 修改实体并提交到数据服务器 /// </summary> /// <param name="item"></param> Task UpdateAsync(TEntity item); /// <summary> /// 添加集合[集合数目不大时用此方法,超大集合使用BulkInsert] /// </summary> /// <param name="item"></param> Task InsertAsync(IEnumerable<TEntity> item); /// <summary> /// 修改集合[集合数目不大时用此方法,超大集合使用BulkUpdate] /// </summary> /// <param name="item"></param> Task UpdateAsync(IEnumerable<TEntity> item); /// <summary> /// 删除集合[集合数目不大时用此方法,超大集合使用批量删除] /// </summary> /// <param name="item"></param> Task DeleteAsync(IEnumerable<TEntity> item); /// <summary> /// 批量添加,添加之前可以去除自增属性,默认不去除 /// </summary> /// <param name="item"></param> /// <param name="isRemoveIdentity"></param> Task BulkInsertAsync(IEnumerable<TEntity> item, bool isRemoveIdentity); /// <summary> /// 批量添加 /// </summary> /// <param name="item"></param> Task BulkInsertAsync(IEnumerable<TEntity> item); /// <summary> /// 批量更新 /// </summary> /// <param name="item"></param> Task BulkUpdateAsync(IEnumerable<TEntity> item, params string[] fieldParams); /// <summary> /// 批量删除 /// </summary> /// <param name="item"></param> Task BulkDeleteAsync(IEnumerable<TEntity> item); }
而原来的IExtendRepository同时去继承同步和异步两个仓储接口
而在调用上,开发者们更清楚自己使用的是同步还是异步方法