博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实体处理模块IEntityModule
阅读量:6989 次
发布时间:2019-06-27

本文共 2431 字,大约阅读时间需要 8 分钟。

在2015年7月16日,XCode新增了实体处理模块IEntityModule,用于拦截实体对象添删改操作。

该接口参考IHttpModule设计理念,横切在实体对象的关键生命周期之中,以达到多实体类通用处理的效果。比如为多个实体类增加假删除等特色功能。

复制代码
/// 实体处理模块public interface IEntityModule{    /// 为指定实体类初始化模块,返回是否支持        ///         /// 
Boolean Init(Type entityType); /// 创建实体对象 /// /// void Create(IEntity entity, Boolean forEdit); /// 验证实体对象 /// /// ///
Boolean Valid(IEntity entity, Boolean isNew); /// 删除实体对象 /// Boolean Delete(IEntity entity);}
复制代码

 

 

我们来看一段接口例程:

复制代码
class TestModule : EntityModule{    protected override Boolean OnInit(Type entityType)    {        return entityType == typeof(UserX);    }    protected override Boolean OnValid(IEntity entity, Boolean isNew)    {        if (isNew)            XTrace.WriteLine("新增实体 " + entity.GetType().Name);        else            XTrace.WriteLine("更新实体 " + entity.GetType().Name);        return base.OnValid(entity, isNew);    }    protected override Boolean OnDelete(IEntity entity)    {        XTrace.WriteLine("删除实体 " + entity.GetType().Name);        return base.OnDelete(entity);    }    public static void Test()    {        EntityModules.Global.Add
(); var user = new UserX { Name = "Stone", RoleID = 1 }; user.Save(); user.Name = "大石头"; user.Update(); user.Delete(); }}
复制代码

模块TestModule继承自抽象基类EntityModule,它实现了IEntityModule接口的基本功能。

EntityModules.Global.Add<TestModule>(); 用于把该模块注册成为全局处理模块

也可以注册到具体单个实体类里面,比如 UserX.Meta.Modules.Add<TestModule>();

 

Init方法用于判断指定实体类是否需要执行过滤模块,只有它返回true,后面的接口方法才会被调用。

OnValid等同于实体类的Valid,新增或修改实体对象时会调用,通过isNew参数区分。因为绝大多数业务逻辑的新增和修改都有关系,所以把它们做到一块。

OnDelete就是删除拦截啦。如果想做假删除,就是在这里把删除标记字段改为true,然后entity.Update保存,接着返回false让外部不要继续执行Delete

 

在XCode内部,有三个最常用的接口实现:UserModule、TimeModule、IPModule

它们的功能如下:

1,新增时CreateUserID使用当前登录用户(通过IManageProvider接口获取),新增修改时UpdateUserID使用当前登录用户

2,新增时CreateTime使用当前时间,新增修改时UpdateTime使用当前时间

3,新增时CreateIP使用当前访问地址(通过WebHelper.UserHost),新增修改时UpdateIP使用当前访问地址

所以,这六个字段赫赫有名,就写在NX001软件设计标准里面。

一般在需要用到的实体类静态构造函数里面注册使用。

复制代码
static Shard(){    // 过滤器 UserModule、TimeModule、IPModule    Meta.Modules.Add
(); Meta.Modules.Add
(); Meta.Modules.Add
();}
复制代码

 

实际使用中,只要一个团队遵循统一的数据库设计规范,就一定可以抽象出来许多IEntityModule实现!

 

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分类:
本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/p/EntityModule.html,如需转载请自行联系原作者
你可能感兴趣的文章
PTA编程总结2:
查看>>
剑指OFFER——顺时针打印矩阵
查看>>
Live Archive 3490 - Generator 概率
查看>>
Oracle SQL Developer
查看>>
Java 线程池框架核心代码分析
查看>>
「学习笔记——Linux」Linux软件管理(RPM,Dpkg,APT)
查看>>
Linux命令的那些事(二)
查看>>
强制转https
查看>>
Ubuntu下GTK的安装、编译和测试
查看>>
javascript中window.open()与window.location.href的区别
查看>>
Respond.js的作用
查看>>
FCN笔记(Fully Convolutional Networks for Semantic Segmentation)
查看>>
外部线程停止Java子线程的方法
查看>>
OpenMP并行编程
查看>>
网络编程
查看>>
【ZJOI2016】线段树
查看>>
mysql的sql文件的备份与还原
查看>>
Java API —— 泛型
查看>>
十三周进度报告
查看>>
「APIO2018」选圆圈
查看>>