在进行列表排序时,有个“上移”和“下移”操作,这个一般在内存里完成,然后统一提交到数据库中,对于上移与下移的设计,大叔在LIND.DDD.DOMAIN里有一个ISortBehavor接口,主要是说,如果实体对象支持排序功能,可以实现这个接口,而在扩展库中,将有为本地结果集动态排序(上移和下移)的方法,这个设计类似于ABP项目里的软删除,当然在大叔LIND里也有对删除的逻辑操作。

ISortBehavor内容

class Entity { public int ID{ get; set; } }

interface ISortBehavor { int SortNumber{ get; set; } }

而上移与下移我们使用一个泛型方法来接收参数,这样扩展性更好一些,开发人员只要把需要上下移的集合传到方法里,之后你的集合就可以被排序,当然这里面会进行各个元素的移动操作!

  /// <summary>
/// 算法帮助类
/// 作者:仓储大叔
/// </summary>
public class AlgorithmsHelper
{
/// <summary>
/// 排序,上移和下移
/// </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 += ;
} }
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 -= ;
}
}
list.ForEach(i =>
{
Console.WriteLine((i as Entity).Id + "sort:" + (i as ISortBehavor).SortNumber);
}
);
}
}

我们测试一下程序,看一下神奇的结果


  class MainClass
{
public static void Main (string[] args)
{
List<Person> list = new List<Person> ();
list.Add (new Person {ID=,Name="zzl",SortNumber=});
list.Add (new Person {ID=,Name="zzl2",SortNumber=});
list.Add (new Person {ID=,Name="zzl3",SortNumber=}); Console.WriteLine ("Hello World!");
Extenstion.Sortable (list, , );
Extenstion.Sortable (list, , ); }
}


单元测试里的结果如图
aaarticlea/png;base64,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" alt="" />
感谢各位中秋阅读!

Lind.DDD.Domain.ISortBehavor~上移与下移的更多相关文章

  1. Lind.DDD.Domain.IOwnerBehavor对实体的意义

    回到目录 对于Lind.DDD架构,我之前写了不少文章,对于它的Domain模式也介绍了不少,像之前的IEntity,ILogicDeleteBehavor,IModifyBehavor,IStatu ...

  2. Lind.DDD.Domain领域模型介绍

    回到目录 Lind.DDD.Domain位于Lind.DDD核心项目中,它主要面向领域实体而设计,由一个IEntity的标识接口,EntityBase基类和N个Entity实体类组成,其中IEntit ...

  3. Lind.DDD敏捷领域驱动框架~介绍

    回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...

  4. Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现

    回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...

  5. Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍

    回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...

  6. Lind.DDD.LindAspects方法拦截的介绍

    回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...

  7. Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP

    回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...

  8. Lind.DDD.Plugins~插件模式的集成

    回到目录 对于Lind.DDD这个敏捷框架来说,插件也是其中的一个亮点,所有被认为是插件(Plugins)的模块都会继承自IPlugins这个标示接口,它在程序启动时会找到所有插件,并通过autofa ...

  9. Lind.DDD.SSO单点登陆组件的使用(原创)

    回到目录 一般sso的说明 在Lind.DDD框架里,有对单点登陆的集成,原理就是各个网站去sso网站统一登陆授权,之后在sso网站将登陆的token进行存储,存储方式随你(cache,redis,m ...

随机推荐

  1. Redis应用场景一

    Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的 ...

  2. 支持向量机(SVM)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略 ...

  3. Angularjs学习---官方phonecat实例学习angularjs step0 step1

    接下来一系列的文章都是学习https://docs.angularjs.org/tutorial的笔记,主要学习的angular-phonecat项目的实现,来介绍angularjs的使用. 1.下载 ...

  4. Selenium WebDriver 3.0 需要注意的事项

    以下所有代码基于Java 首先,要使用WebDriver 3.0 的话 请使用JAVA 8(必要)   其次,由于W3C标准化以及各大浏览器厂商的积极跟进,自WebDriver 3.0 之后,Sele ...

  5. 无法启动WP Emulator

    记得以前Vware不能运行设置的东西了吗?http://www.cnblogs.com/dunitian/p/4480750.html 如果不清楚可以参考上面的链接 重启的时候选择第二项 重新打开就o ...

  6. JAVA基础代码分享--学生成绩管理

    问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10  等级为’A’   成绩>=最高分-20  等级为’B’ 成绩>=最高分-30  等级为’C’ ...

  7. 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法

    需要下载Genymotion-ARM-Translation_v1.1.zip  ARM插件包 用于安装ARM架构的程序,将下载好的zip包用鼠标拖到虚拟机窗口中,出现确认对跨框点OK就行.然后重启你 ...

  8. 编写atoi库函数

    看到很多面试书和博客都提到编写atoi函数,在很多面试中面试官都会要求应聘者当场写出atoi函数的实现代码,但基本很少人能写的完全正确,倒不是这道题有多么高深的算法,有多么复杂的数据结构,只因为这道题 ...

  9. java 线程的开始、暂停、继续

    Android项目中的一个需求:通过线程读取文件内容,并且可以控制线程的开始.暂停.继续,来控制读文件.在此记录下. 直接在主线程中,通过wait.notify.notifyAll去控制读文件的线程( ...

  10. 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)

    从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...