基礎才是重中之重~這時應該用泛型方法了
泛型方(fang)法(fa):是一(yi)個(ge)抽象的概念,將批(pi)量具有共性的操(cao)作進行抽象,使(shi)用泛型類(lei)型來(lai)表示(shi)這(zhe)個(ge)方(fang)法(fa),實(shi)現這(zhe)些類(lei)型的方(fang)法(fa)具有相(xiang)同(tong)的邏輯,而唯一(yi)不同(tong)的是,它們(men)的類(lei)型,即類(lei)型在泛型方(fang)法(fa)里是個(ge)變(bian)量,這(zhe)話感(gan)覺(jue)是用肺說出來(lai)的,呵呵!
今天在做開發時,遇到(dao)了(le)(le)這個(ge)問題,最(zui)后重(zhong)構了(le)(le)自己的代(dai)碼(ma),重(zhong)構后,使(shi)用(yong)了(le)(le)泛型(xing)方(fang)法,感覺代(dai)碼(ma)美(mei)麗多了(le)(le)
沒用泛型方法前
/// <summary> /// 更新老師與學(xue)生的關系(xi) /// </summary> /// <param name="list">要插(cha)入(ru)的關系列(lie)表</param> /// <param name="isAll">是否為全(quan)部,如(ru)果(guo)全(quan)部,不(bu)需(xu)要(yao)向關系表插(cha)入</param> /// <param name="teacherId">當前老師ID</param> /// <param name="type">類型:0視頻,1作業,3文檔(dang)</param> public void AddUser_Source_R(List<User_Source_R> list, bool isAll, int teacherId, int objId, int objType) { switch (objType) { case 0: var respository1 = LoadRepository<Classroom_Info>(); var entity1 = LoadRepository<Classroom_Info>().Find(objId); if (isAll) { entity1.AccessStatus = 0; respository1.Update(entity1); } else { entity1.AccessStatus = 1; respository1.Update(entity1); LoadRepository<User_Source_R>().Insert(list); } break; case 1: var respository2 = LoadRepository<Courseware_Info>(); var entity2 = LoadRepository<Courseware_Info>().Find(objId); if (isAll) { entity2.AccessStatus = 0; respository2.Update(entity2); } else { entity2.AccessStatus = 1; respository2.Update(entity2); LoadRepository<User_Source_R>().Insert(list); } break; case 2: var respository3 = LoadRepository<Task_Info>(); var entity3 = LoadRepository<Task_Info>().Find(objId); if (isAll) { entity3.AccessStatus = 0; respository3.Update(entity3); } else { entity3.AccessStatus = 1; respository3.Update(entity3); LoadRepository<User_Source_R>().Insert(list); } break; case 3: var respository4 = LoadRepository<Substance_Info>(); var entity4 = LoadRepository<Substance_Info>().Find(objId); if (isAll) { entity4.AccessStatus = 0; respository4.Update(entity4); } else { entity4.AccessStatus = 1; respository4.Update(entity4); LoadRepository<User_Source_R>().Insert(list); } break; default: throw new ArgumentException(); } }
用了泛型方法后
/// <summary> /// 更(geng)新老(lao)師與學生的關系(xi) /// </summary> /// <param name="list">要插入的關系列表(biao)</param> /// <param name="isAll">是否為全部,如果全部,不需(xu)要向關系(xi)表(biao)插入</param> /// <param name="teacherId">當前老師(shi)ID</param> /// <param name="type">>資(zi)源類型0課程,1視頻,2作(zuo)業(ye),3文檔</param> public void AddUser_Source_R( List<User_Source_R> list, bool isAll, int objId, int objType) { switch (objType) { case 0: UpdateSource_R<Classroom_Info>(list, isAll, objId); break; case 1: UpdateSource_R<Courseware_Info>(list, isAll, objId); break; case 2: UpdateSource_R<Task_Info>(list, isAll, objId); break; case 3: UpdateSource_R<Substance_Info>(list, isAll, objId); break; default: throw new ArgumentException(); } } /// <summary> /// 泛型方法來干(gan)這邏輯相同,只是類型不同的事情 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="list"></param> /// <param name="isAll"></param> /// <param name="teacherId"></param> /// <param name="objId"></param> /// <param name="objType"></param> void UpdateSource_R<TEntity>( List<User_Source_R> list, bool isAll, int objId) where TEntity : class, IAccess { var entity = LoadRepository<TEntity>().Find(objId); if (isAll) { entity.AccessStatus = 0; LoadRepository<TEntity>().Update(entity); } else { entity.AccessStatus = 1; LoadRepository<TEntity>().Update(entity); LoadRepository<User_Source_R>().Insert(list); } }
我們(men)可以看是,泛型方法把不變的(de)邏輯抽象在一起,這樣(yang),有利于代碼的(de)擴展和維(wei)護,這才是面向(xiang)對象的(de)代碼!