EF架構~EF異步改造(zao)之路~倉儲接(jie)口(kou)的(de)改造(zao)~續
在寫完倉儲接口的改造改造后(hou),總覺得有(you)個代(dai)碼(ma)的(de)(de)壞(huai)味道(dao),這種味道(dao)源于它(ta)的(de)(de)DRP,即重復的(de)(de)代(dai)碼(ma)太多(duo)了,即異步(bu)操作(zuo)(zuo)和同步(bu)操作(zuo)(zuo)其實只是(shi)在insert,update和delete上有(you)所不同,獲取數據的(de)(de)方(fang)法(fa)都(dou)(dou)是(shi)一樣的(de)(de),所以,我最后(hou)決(jue)定,將異步(bu)的(de)(de)接(jie)口進行改造(zao),讓它(ta)更加(jia)合理,方(fang)法(fa)后(hou)都(dou)(dou)加(jia)上Async的(de)(de)后(hou)綴,看上去(qu)也更像是(shi)個異步(bu)方(fang)法(fa),呵。
改造后的異步接口
/// <summary> /// 異步操作(zuo) /// 基礎的數(shu)據操作規(gui)范 /// 與ORM架構無關 /// </summary> /// <typeparam name="TEntity"></typeparam> public interface IRepositoryAsync<TEntity> where TEntity : class { /// <summary> /// 添加實體并提交(jiao)到(dao)數據服務器 /// </summary> /// <param name="item">Item to add to repository</param> Task InsertAsync(TEntity item); /// <summary> /// 移除(chu)實體(ti)并提交到(dao)數據服務器 /// 如果(guo)表(biao)存在(zai)約束,需要先刪除子(zi)表(biao)信息 /// </summary> /// <param name="item">Item to delete</param> Task DeleteAsync(TEntity item); /// <summary> /// 修(xiu)改實體(ti)并提交到數據服務(wu)器(qi) /// </summary> /// <param name="item"></param> Task UpdateAsync(TEntity item); /// <summary> /// 添加(jia)集合(he)[集合(he)數(shu)目不(bu)大時用(yong)此方法(fa),超大集合(he)使(shi)用(yong)BulkInsert] /// </summary> /// <param name="item"></param> Task InsertAsync(IEnumerable<TEntity> item); /// <summary> /// 修改集(ji)合(he)(he)(he)[集(ji)合(he)(he)(he)數目不大(da)時用此(ci)方法(fa),超大(da)集(ji)合(he)(he)(he)使用BulkUpdate] /// </summary> /// <param name="item"></param> Task UpdateAsync(IEnumerable<TEntity> item); /// <summary> /// 刪(shan)(shan)除(chu)集(ji)合(he)[集(ji)合(he)數目不大時用此方法,超大集(ji)合(he)使(shi)用批量(liang)刪(shan)(shan)除(chu)] /// </summary> /// <param name="item"></param> Task DeleteAsync(IEnumerable<TEntity> item); /// <summary> /// 批量添加,添加之(zhi)前可以去(qu)除自增屬性,默(mo)認不(bu)去(qu)除 /// </summary> /// <param name="item"></param> /// <param name="isRemoveIdentity"></param> Task BulkInsertAsync(IEnumerable<TEntity> item, bool isRemoveIdentity); /// <summary> /// 批量添(tian)加 /// </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> /// 批量(liang)刪除 /// </summary> /// <param name="item"></param> Task BulkDeleteAsync(IEnumerable<TEntity> item); }
而原來的IExtendRepository同時(shi)去(qu)繼承同步和異步兩個倉(cang)儲接口
而在調(diao)用上,開發者們更清楚自己使(shi)用的是同步還是異步方法