WEB开发网
开发学院软件开发C语言 C#发现之旅:基于反射和动态编译的快速ORM框架(上... 阅读

C#发现之旅:基于反射和动态编译的快速ORM框架(上)

 2010-09-30 21:08:28 来源:WEB开发网   
核心提示: 在这个函数中,参数就是实体对象类型,C#发现之旅:基于反射和动态编译的快速ORM框架(上)(7),首先从注册列表中获得数据库操作帮助器,若没有找到则进行注册,使用BeginGroup来开始缩进一段代码块,使用EndGroup来结束缩进一段代码块,然后调用BuildHelpers执行动态编译生成数

在这个函数中,参数就是实体对象类型,首先从注册列表中获得数据库操作帮助器,若没有找到则进行注册,然后调用BuildHelpers执行动态编译生成数据库操作帮助器。然后再尝试从注册列表中获得数据库操作帮助器。

在ORM框架中,GetHelper函数会频繁的调用,因此使用实体对象类型注册列表可以提高系统性能。应用系统多次连续的调用RegisterType函数会导致类型注册列表中有多个类型对应的数据库操作帮助器是空的,而再BuildHelpers函数内部会对所有的没有设定数据库操作帮助器的实体对象类型执行动态编译的操作,能一下子生成多个数据库操作帮助器,这样能尽量减少动态编译的次数。

代码生成器

在动态编译框架中,代码生成器是非常重要的部分。没有代码生成器,动态编译框架成了无源之水,无米之炊了。代码生成器的主要工作就是使用反射解析数据库实体类的结构,分析其中的数据库绑定信息,然后使用字符串拼凑的操作来生成C#代码字符串。

要设计出代码生成器,首先的设计出其要输出的C#代码的结构,我们可以不使用那个基础的RecordORMHelper而完全依赖生成的C#代码来完成数据库的映射功能,不过即使用代码生成器,我们也得考虑到代码的重用,于是我们把一些通用的代码放到RecordORMHelper中,然后动态生成的C#类就继承自RecordORMHelper。

ORM框架中还包含了一个IndentTextWriter的支持缩进的文本书写器,虽然我们可以完全使用字符串加号操作来生成代码文本,但使用IndentTextWriter能让工作更高效,生成的代码也便于人们阅读,这有利于代码生成器的调试和维护。在IndentTextWriter中,使用BeginGroup来开始缩进一段代码块,使用EndGroup来结束缩进一段代码块,使用WriteLine来输出一行代码文本。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:发现 之旅 基于

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接