Generate

实体类的动态生成(三)

前言 在 .NET 中主要有两种动态生成并编译的方式,一种是通过 System.Linq.Expressions 命名空间中的 LambdaExpression 类的 CompileToMethod(...) 方法,但是这种方法只支持动态编译到静态方法,因为这个限制我们只能放弃它而采用 Emitting 生成编译方案,虽然 Emitting 方案强大但是实现起来麻烦不少,必须要手动处理底层 IL 的各种细节,脑补一些 C# 编译器的实现机理,同时还要了解一 …

实体类的动态生成(二)

前言 由于采用字典的方式来保存属性变更值的底层设计思想,导致了性能问题,虽然.NET的字典实现已经很高效了,但相对于直接读写字段的方式而言依然有巨大的性能差距,同时也会导致对属性的读写过程中产生不必要的装箱和拆箱。 那么这次我们就来彻底解决这个问题,同时还要解决“哪些属性发生过变更”、“获取变更的属性集”这些功能特性,所以我们先把接口定义出来,以便后续问题讲解。

实体类的动态生成(一)

前言 在应用开发中,通常都会涉及各种 POJO/POCO 实体类(DO, DTO, BO, VO)的编写,有时这些实体类还需要实现 INotifyPropertyChanged 接口以支持属性变更通知,一般我们都会手写这些代码或者通过工具根据数据库表定义抑或别的什么模板、映射文件之类的来静态生成它们。 但是,在业务实现中往往伴随着诸如“如何简单且高效的获取某个实体实例有哪些属性发生过变更?”、“变更后的值是什么?”这样的问题,而大致的解决方法有: