这一节详细描述一下代码生成器的工作远离和机制
其实目的很简单,就是根据框架的结构,自动为实体生成实体类代码和相关的数据控制类代码
我的设计思路是:把类实体的结构特征进行抽象分解,用另外一组类结构来表达类,接口,属性,方法等等
比如对于一个实体类:
类由以下几个部分组成
声明部分
属性部分
声明部分又细分为: 修饰符,类名称,继承/泛化的信息
属性部分又可细分为:修饰符,数据类型,属性名称,(对于Visual 2008版本以前的,还需要分出私有字段以对应属性)
- //Visual 2008
- public string Name
- {
- get;
- set;
- }
- //Visual 2005
- private string m_Name;
- public string Name
- {
- get
- {
- return m_Name;
- }
- set
- {
- m_Name = value;
- }
- }
各部分详细说明:
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写的快(呵呵)
至于界面我就在这里说了,因为我写的界面很难看,虽然能生成。