还从没有用UNL工具设计过什么项目,这次算是个尝试。这是我对关于代码生成的设想。
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。
简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。
/**//***********************************************************************
* Module:
* Author: Wu.Country
* Modified: 4/21/2006 10:53:12 AM
* Purpose:
* Create by: Webb.SmartCoder
***********************************************************************/
using System;
using System.Data;
using Webb.PublicControls;
namespace Webb.SmartCode
{
public class new_class
{
Fields#region Fields
public string c_id;
public string c_loginName;
public string c_email;
public string c_address;
#endregion
Properties#region Properties
public string a
{
get{return this.c_id;}
set{this.c_id = value;}
}
public string b
{
get{return this.c_loginName;}
set{this.c_loginName = value;}
}
public string c
{
get{return this.c_email;}
set{this.c_email = value;}
}
public string d
{
get{return this.c_address;}
set{this.c_address = value;}
}
#endregion
/**//// <summary>
///AddToDB
///</summary>
public void AddToDB()
{
// To do implement you code
}
/**//// <summary>
///LoadData
///</summary>
public void LoadData()
{
// To do implement you code
}
}
}
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。
简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。
第二次修改以及按照这样的模式写了一些代码。。。。。。当然,也还存在一些问题。。。
这是用来生成的代码的一个测试函数,应该是很简单的了,当然,与数据库连接以及一些UI层,都可以后来再慢慢的做了。
private void button1_Click(object sender, System.EventArgs e)
{
CSClass m_class = new CSClass();
m_class.Name = "new_class";
m_class.Namespace = "Webb.SmartCode";
FunctionCollection m_functions = m_class.Functions as FunctionCollection;
m_functions.Add(new CSFunction(CSFunction.FunctionType.AddToDB));
m_functions.Add(new CSFunction(CSFunction.FunctionType.LoadData));
FieldsCollection m_field = m_class.Fields as FieldsCollection;
m_field.Add(new Field("c_id"));
m_field.Add(new Field("c_loginName"));
m_field.Add(new Field("c_email"));
m_field.Add(new Field("c_address"));
MemoryStream m_stream = new MemoryStream();
TextWriter m_writer = new StreamWriter(m_stream);
m_class.RenderCode(m_writer);
m_writer.Flush();
byte[] m_codeData = m_stream.ToArray();
this.richTextBox1.Text = System.Text.Encoding.Default.GetString(m_codeData);
}
{
CSClass m_class = new CSClass();
m_class.Name = "new_class";
m_class.Namespace = "Webb.SmartCode";
FunctionCollection m_functions = m_class.Functions as FunctionCollection;
m_functions.Add(new CSFunction(CSFunction.FunctionType.AddToDB));
m_functions.Add(new CSFunction(CSFunction.FunctionType.LoadData));
FieldsCollection m_field = m_class.Fields as FieldsCollection;
m_field.Add(new Field("c_id"));
m_field.Add(new Field("c_loginName"));
m_field.Add(new Field("c_email"));
m_field.Add(new Field("c_address"));
MemoryStream m_stream = new MemoryStream();
TextWriter m_writer = new StreamWriter(m_stream);
m_class.RenderCode(m_writer);
m_writer.Flush();
byte[] m_codeData = m_stream.ToArray();
this.richTextBox1.Text = System.Text.Encoding.Default.GetString(m_codeData);
}
生成的代码为:
/**//***********************************************************************
* Module:
* Author: Wu.Country
* Modified: 4/21/2006 10:53:12 AM
* Purpose:
* Create by: Webb.SmartCoder
***********************************************************************/
using System;
using System.Data;
using Webb.PublicControls;
namespace Webb.SmartCode
{
public class new_class
{
Fields#region Fields
public string c_id;
public string c_loginName;
public string c_email;
public string c_address;
#endregion
Properties#region Properties
public string a
{
get{return this.c_id;}
set{this.c_id = value;}
}
public string b
{
get{return this.c_loginName;}
set{this.c_loginName = value;}
}
public string c
{
get{return this.c_email;}
set{this.c_email = value;}
}
public string d
{
get{return this.c_address;}
set{this.c_address = value;}
}
#endregion
/**//// <summary>
///AddToDB
///</summary>
public void AddToDB()
{
// To do implement you code
}
/**//// <summary>
///LoadData
///</summary>
public void LoadData()
{
// To do implement you code
}
}
}
最后的设计模式,而且代码已经初步形成!想想,用这样的设计模式来开发项目应该还是不错的。当然还关于Form的设计图。
============================================================
我终于迫不及待想发点东西上来了,这是初步的UI,应该还可以。关于代码生成的结构就以上面的UML模式暂时定下来了。这里的设计模式中还保留了一些没完成的设计,例如,关于模板类或者接口,都没有完成,如果可能,完全可以用模板生成Java或者C++的代码。
当然,在后期的设计中,还可以添加一些UI层的代码设计,其实这次的设计完全是基于对UML架构的学习而开发的,希望能与大家一起讨论学习。
下面的是暂时的界面。