Lind.DDD.Domain.ISortBehavor~上移與下移
在(zai)(zai)進行列表排(pai)序時(shi),有個“上移(yi)(yi)”和(he)“下移(yi)(yi)”操(cao)作,這個一(yi)般在(zai)(zai)內存里(li)完成,然后統一(yi)提(ti)交到數據庫中,對(dui)于(yu)上移(yi)(yi)與下移(yi)(yi)的設(she)計,大叔(shu)在(zai)(zai)LIND.DDD.DOMAIN里(li)有一(yi)個ISortBehavor接口,主要(yao)是(shi)說,如果(guo)(guo)實體對(dui)象支持排(pai)序功能,可(ke)以實現(xian)這個接口,而在(zai)(zai)擴(kuo)展庫中,將(jiang)有為(wei)本地結果(guo)(guo)集(ji)動態排(pai)序(上移(yi)(yi)和(he)下移(yi)(yi))的方法,這個設(she)計類似于(yu)ABP項(xiang)目里(li)的軟刪除(chu),當然在(zai)(zai)大叔(shu)LIND里(li)也有對(dui)刪除(chu)的邏(luo)輯操(cao)作。
ISortBehavor內容
class Entity { public int ID{ get; set; } } interface ISortBehavor { int SortNumber{ get; set; } }
而上移(yi)(yi)與下移(yi)(yi)我們(men)使用一個泛型方法來接收參(can)數,這樣擴展性更好一些,開發人員只(zhi)要(yao)把(ba)需(xu)要(yao)上下移(yi)(yi)的(de)集(ji)合傳(chuan)到方法里,之后你的(de)集(ji)合就可以被(bei)排序,當然這里面會進行各個元素的(de)移(yi)(yi)動操作!
/// <summary> /// 算法(fa)幫助類 /// 作者(zhe):倉儲大叔 /// </summary> public class AlgorithmsHelper { /// <summary> /// 排序,上移(yi)和(he)下移(yi) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <param name="id"></param> /// <param name="newSort"></param> public static void Sortable_Up_Down<T>(List<T> list, int id, int newSort) where T : class { var old = list.Find(i => (i as Entity).Id == id); if (old == null || (old as ISortBehavor).SortNumber == newSort) return; if ((old as ISortBehavor).SortNumber > newSort) { (old as ISortBehavor).SortNumber = newSort; foreach (ISortBehavor item in list.FindAll(i => (i as Entity).Id != id && (i as ISortBehavor).SortNumber >= newSort)) { item.SortNumber += 1; } } else { (old as ISortBehavor).SortNumber = newSort; foreach (ISortBehavor item in list.FindAll(i => (i as Entity).Id != id && (i as ISortBehavor).SortNumber <= newSort)) { item.SortNumber -= 1; } } list.ForEach(i => { Console.WriteLine((i as Entity).Id + "sort:" + (i as ISortBehavor).SortNumber); } ); } }
我(wo)們(men)測試一下程序(xu),看一下神奇的結果
class MainClass { public static void Main (string[] args) { List<Person> list = new List<Person> (); list.Add (new Person {ID=1,Name="zzl",SortNumber=1}); list.Add (new Person {ID=2,Name="zzl2",SortNumber=2}); list.Add (new Person {ID=3,Name="zzl3",SortNumber=3}); Console.WriteLine ("Hello World!"); Extenstion.Sortable (list, 1, 2); Extenstion.Sortable (list, 2, 3); } }
單元測試里的結果如圖
感謝各位中秋閱讀!