Lind.DDD.Domain.ISortBehavor~上移与下移
在进行列表排序时,有个“上移”和“下移”操作,这个一般在内存里完成,然后统一提交到数据库中,对于上移与下移的设计,大叔在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, , ); }
}
Lind.DDD.Domain.ISortBehavor~上移与下移的更多相关文章
- Lind.DDD.Domain.IOwnerBehavor对实体的意义
回到目录 对于Lind.DDD架构,我之前写了不少文章,对于它的Domain模式也介绍了不少,像之前的IEntity,ILogicDeleteBehavor,IModifyBehavor,IStatu ...
- Lind.DDD.Domain领域模型介绍
回到目录 Lind.DDD.Domain位于Lind.DDD核心项目中,它主要面向领域实体而设计,由一个IEntity的标识接口,EntityBase基类和N个Entity实体类组成,其中IEntit ...
- Lind.DDD敏捷领域驱动框架~介绍
回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...
- Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现
回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...
- Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍
回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...
- Lind.DDD.LindAspects方法拦截的介绍
回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...
- Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP
回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...
- Lind.DDD.Plugins~插件模式的集成
回到目录 对于Lind.DDD这个敏捷框架来说,插件也是其中的一个亮点,所有被认为是插件(Plugins)的模块都会继承自IPlugins这个标示接口,它在程序启动时会找到所有插件,并通过autofa ...
- Lind.DDD.SSO单点登陆组件的使用(原创)
回到目录 一般sso的说明 在Lind.DDD框架里,有对单点登陆的集成,原理就是各个网站去sso网站统一登陆授权,之后在sso网站将登陆的token进行存储,存储方式随你(cache,redis,m ...
随机推荐
- C#开源日志Nlog入门
c#语言使用的日志比较多,比如:Log4.NLog等,今天我就简单随笔记录哈NLog的使用. 1.NLog的安装: 直接在VS编译器中打开程序包管理器,输入Install-Package NLogin ...
- EditText中imeOptions属性使用及设置无效解决
虽然通常输入法软键盘右下角会是回车按键 但我们经常会看到点击不同的编辑框,输入法软键盘右下角会有不同的图标 点击浏览器网址栏的时候,输入法软键盘右下角会变成“GO”或“前往” 而我们点击Google搜 ...
- Spring中AOP(通知)的使用
1.新建 Spring Bean Configuration File xml格式的文件 2. xml文件 <bean id="my1" class="xml.M ...
- 精通visual c++指纹模式识别系统算法及实现
通过学习,掌握以下几个问题: 1.核心算法,并且向GVF衍生: 2.核心库封装的方法 2016年11月16日06:52:51 昨日实现了梯度场和频率场的计算.最大的感觉就是建立基础代码库的重要性. 如 ...
- webpack进阶构建项目(一)
webpack进阶构建项目(一) 阅读目录 1.理解webpack加载器 2.html-webpack-plugin学习 3.压缩js与css 4.理解less-loader加载器的使用 5.理解ba ...
- VB.NET 如何进行调用HTTP外部接口
直接上干货 Private Function POST(ByVal URL$, ByVal data$) Dim http On Error Resume Next http = CreateObj ...
- javascript面向对象系列第一篇——构造函数和原型对象
× 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...
- Neutron 架构 - 每天5分钟玩转 OpenStack(67)
前面我们讨论了 Neutron 的基本概念,今天我们开始分析 Neutron 的架构. Neutron 架构 与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多 ...
- ListView+CheckBox实现全选 单击效果
在网上也找了一些案例,但都是用Map来实现的.我的是把对象绑定到当前控件上.代码稍微简洁. main布局文件:main.xml <?xml version="1.0" enc ...
- 辨析relative与absolute
谈起它们,想必大家都不陌生.relative,相对定位嘛:absolute,绝对定位嘛.但是它们到底是个啥东东呢? 看看w3c的定义,见下表 定位 含义 relative 元素框偏移某个距离.元素仍保 ...