基于配置的ORMapping框架浅析之5 (类代码生成器)

来源:互联网 发布:surface 无网络 编辑:程序博客网 时间:2024/05/21 10:21

这一节详细描述一下代码生成器的工作远离和机制

 

其实目的很简单,就是根据框架的结构,自动为实体生成实体类代码和相关的数据控制类代码

我的设计思路是:把类实体的结构特征进行抽象分解,用另外一组类结构来表达类,接口,属性,方法等等

比如对于一个实体类:

类由以下几个部分组成

声明部分

属性部分

 

声明部分又细分为: 修饰符,类名称,继承/泛化的信息

属性部分又可细分为:修饰符,数据类型,属性名称,(对于Visual 2008版本以前的,还需要分出私有字段以对应属性)

 

  1. //Visual 2008 
  2. public string Name
  3. {
  4.    get;
  5.    set;
  6. }
  7. //Visual 2005 
  8. private string m_Name;
  9. public string Name
  10. {
  11.   get
  12.   {
  13.     return m_Name;
  14.   }
  15.   set
  16.   {
  17.     m_Name = value;
  18.   }
  19. }
下图是定义分解表的粗略图,将实体的各种类型分解到定义类中,其实相当于是一个元数据模型

 

 

各部分详细说明:

ProjectDefine  项目定义类,里面含有 命名空间,引用的类库等属性

CLassDefine    类定义类

InterFaceDefine  接口定义类

EnumDefine   枚举定义类

ObjectDefine  对象定义类,里面含有上述3个定义类的公共属性(对象限定符,名称等等)

 

PropertyDefine 属性定义类

BasicPropertyDefine 基础属性定义类,该类的数据类型主要是系统的内建类型

ComplicatedPropertyDefine 复杂属性定义类,该类的数据类型主要是自定义的

 

DataTypeDefine 数据类型定义类

BasicDataTypeDefine  (int,string,DateTime等等)

ComplicatedDataTypeDefine 复杂数据类型定义类

 

这里没有在定义字段定义类了,因为Visual 2008 在定义属性的时候,不再需要描述一个字段与其对应了

 

当然在这个粗略图上,还可以加上你自己的框架所需要的元素,比如数据库实例名称,如果要使用标签声明式编程的一些东西

以下是我在visual 2005上的开发的全类图

注意:Location 是坐标位置类,主要是以后实现图形拖拉时使用的

        DataMapperDefine这些类实际和我的框架有关,如果你只是生成实体类,这些可以不用定义的

 

 

至于最后的存储,我使用了二进制序列化存储,没有使用数据库进行存储。

 

当你把这个核心结构定义好了后,就可以设计界面来生成类,接口和枚举了

如何生成代码?

1  Codom

2  StringBuilder

都可以的,用Codom的好处很多,也可直接生成VB和C#的代码,但STringBuilder写的快(呵呵)

 

至于界面我就在这里说了,因为我写的界面很难看,虽然能生成。

 

原创粉丝点击