国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

基礎才是重中之重~這時應該用泛型方法了

2019-11-17 02:51:25
字體:
來源:轉載
供稿:網友

基礎才是重中之重~這時應該用泛型方法了

回到目錄

泛型方法:是一個抽象的概念,將批量具有共性的操作進行抽象,使用泛型類型來表示這個方法,實現這些類型的方法具有相同的邏輯,而唯一不同的是,它們的類型,即類型在泛型方法里是個變量,這話感覺是用肺說出來的,呵呵!

今天在做開發時,遇到了這個問題,最后重構了自己的代碼,重構后,使用了泛型方法,感覺代碼美麗多了

沒用泛型方法前

      /// <summary>        /// 更新老師與學生的關系        /// </summary>        /// <param name="list">要插入的關系列表</param>        /// <param name="isAll">是否為全部,如果全部,不需要向關系表插入</param>        /// <param name="teacherId">當前老師ID</param>        /// <param name="type">類型:0視頻,1作業,3文檔</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>        /// 更新老師與學生的關系        /// </summary>        /// <param name="list">要插入的關系列表</param>        /// <param name="isAll">是否為全部,如果全部,不需要向關系表插入</param>        /// <param name="teacherId">當前老師ID</param>        /// <param name="type">>資源類型0課程,1視頻,2作業,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>        /// 泛型方法來干這邏輯相同,只是類型不同的事情        /// </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);            }        }

我們可以看是,泛型方法把不變的邏輯抽象在一起,這樣,有利于代碼的擴展和維護,這才是面向對象的代碼!

回到目錄


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新建县| 东乡族自治县| 横峰县| 静乐县| 彭山县| 理塘县| 介休市| 兴安盟| 正阳县| 浙江省| 云林县| 西丰县| 千阳县| 太仓市| 红河县| 岳阳市| 兴宁市| 富蕴县| 田阳县| 山丹县| 长葛市| 鸡泽县| 松潘县| 海盐县| 思茅市| 团风县| 大安市| 阳新县| 民县| 那曲县| 苏尼特左旗| 普格县| 黑水县| 阜城县| 黄大仙区| 稷山县| 东乡县| 岗巴县| 行唐县| 涟水县| 虹口区|