试设计代码生成器模式[初步]
还从没有用UNL工具设计过什么项目,这次算是个尝试。这是我对关于代码生成的设想。
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。
![UML_for_SmartCoder_1.JPG](/images/cnblogs_com/wucountry/2006_04/UML_for_SmartCoder_1.JPG)
简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。
第二次修改以及按照这样的模式写了一些代码。。。。。。当然,也还存在一些问题。。。
![UML_for_SmartCoder_2.JPG](/images/cnblogs_com/wucountry/2006_04/UML_for_SmartCoder_2.JPG)
这是用来生成的代码的一个测试函数,应该是很简单的了,当然,与数据库连接以及一些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"));
![](/Images/OutliningIndicators/InBlock.gif)
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);
}
生成的代码为:
![](/Images/OutliningIndicators/None.gif)
/***********************************************************************
* Module:
* Author: Wu.Country
* Modified: 4/21/2006 10:53:12 AM
* Purpose:
* Create by: Webb.SmartCoder
***********************************************************************/
![](/Images/OutliningIndicators/None.gif)
using System;
using System.Data;
using Webb.PublicControls;
![](/Images/OutliningIndicators/None.gif)
namespace Webb.SmartCode
{
public class new_class
{
Fields
![](/Images/OutliningIndicators/InBlock.gif)
Properties
![](/Images/OutliningIndicators/InBlock.gif)
/// <summary>
///AddToDB
///</summary>
public void AddToDB()
{
![](/Images/OutliningIndicators/InBlock.gif)
// To do implement you code![](https://www.cnblogs.com/Images/dot.gif)
}
/// <summary>
///LoadData
///</summary>
public void LoadData()
{
// To do implement you code![](https://www.cnblogs.com/Images/dot.gif)
}
}
}
![](/Images/OutliningIndicators/None.gif)
最后的设计模式,而且代码已经初步形成!想想,用这样的设计模式来开发项目应该还是不错的。当然还关于Form的设计图。
![UML_for_SmartCoder_3.JPG](/images/cnblogs_com/wucountry/2006_04/UML_for_SmartCoder_3.JPG)
============================================================
我终于迫不及待想发点东西上来了,这是初步的UI,应该还可以。关于代码生成的结构就以上面的UML模式暂时定下来了。这里的设计模式中还保留了一些没完成的设计,例如,关于模板类或者接口,都没有完成,如果可能,完全可以用模板生成Java或者C++的代码。
当然,在后期的设计中,还可以添加一些UI层的代码设计,其实这次的设计完全是基于对UML架构的学习而开发的,希望能与大家一起讨论学习。
下面的是暂时的界面。
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。
简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。
第二次修改以及按照这样的模式写了一些代码。。。。。。当然,也还存在一些问题。。。
这是用来生成的代码的一个测试函数,应该是很简单的了,当然,与数据库连接以及一些UI层,都可以后来再慢慢的做了。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
生成的代码为:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
最后的设计模式,而且代码已经初步形成!想想,用这样的设计模式来开发项目应该还是不错的。当然还关于Form的设计图。
============================================================
我终于迫不及待想发点东西上来了,这是初步的UI,应该还可以。关于代码生成的结构就以上面的UML模式暂时定下来了。这里的设计模式中还保留了一些没完成的设计,例如,关于模板类或者接口,都没有完成,如果可能,完全可以用模板生成Java或者C++的代码。
当然,在后期的设计中,还可以添加一些UI层的代码设计,其实这次的设计完全是基于对UML架构的学习而开发的,希望能与大家一起讨论学习。
下面的是暂时的界面。
================================
/\_/\
(=^o^=) Wu.Country@侠缘
(~)@(~) 一辈子,用心做一件事!
--------------------------------
学而不思则罔,思而不学则怠!
================================
/\_/\
(=^o^=) Wu.Country@侠缘
(~)@(~) 一辈子,用心做一件事!
--------------------------------
学而不思则罔,思而不学则怠!
================================
posted on 2006-04-18 17:34 Wu.Country@侠缘 阅读(803) 评论(1) 编辑 收藏 举报