试设计代码生成器模式[初步]
还从没有用UNL工具设计过什么项目,这次算是个尝试。这是我对关于代码生成的设想。
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。

简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。
第二次修改以及按照这样的模式写了一些代码。。。。。。当然,也还存在一些问题。。。

这是用来生成的代码的一个测试函数,应该是很简单的了,当然,与数据库连接以及一些UI层,都可以后来再慢慢的做了。
 private void button1_Click(object sender, System.EventArgs e)
        private void button1_Click(object sender, System.EventArgs e)
 {
        {
 CSClass m_class = new CSClass();
            CSClass m_class = new CSClass();
 m_class.Name    = "new_class";
            m_class.Name    = "new_class";
 m_class.Namespace    = "Webb.SmartCode";
            m_class.Namespace    = "Webb.SmartCode";
 FunctionCollection m_functions    = m_class.Functions as FunctionCollection;
            FunctionCollection m_functions    = m_class.Functions as FunctionCollection;
 m_functions.Add(new CSFunction(CSFunction.FunctionType.AddToDB));
            m_functions.Add(new CSFunction(CSFunction.FunctionType.AddToDB));
 m_functions.Add(new CSFunction(CSFunction.FunctionType.LoadData));
            m_functions.Add(new CSFunction(CSFunction.FunctionType.LoadData));
 FieldsCollection m_field        = m_class.Fields as FieldsCollection;
            FieldsCollection m_field        = m_class.Fields as FieldsCollection;
 m_field.Add(new Field("c_id"));
            m_field.Add(new Field("c_id"));
 m_field.Add(new Field("c_loginName"));
            m_field.Add(new Field("c_loginName"));
 m_field.Add(new Field("c_email"));
            m_field.Add(new Field("c_email"));
 m_field.Add(new Field("c_address"));
            m_field.Add(new Field("c_address"));

 MemoryStream m_stream    = new MemoryStream();
            MemoryStream m_stream    = new MemoryStream();
 TextWriter m_writer        = new StreamWriter(m_stream);
            TextWriter m_writer        = new StreamWriter(m_stream);
 m_class.RenderCode(m_writer);
            m_class.RenderCode(m_writer);
 m_writer.Flush();
            m_writer.Flush();
 byte[] m_codeData        = m_stream.ToArray();
            byte[] m_codeData        = m_stream.ToArray();
 this.richTextBox1.Text    = System.Text.Encoding.Default.GetString(m_codeData);
            this.richTextBox1.Text    = System.Text.Encoding.Default.GetString(m_codeData);
 }
        }
生成的代码为:

 /***********************************************************************
/***********************************************************************
 * Module:
 * Module:  
 * Author:  Wu.Country
 * Author:  Wu.Country
 * Modified: 4/21/2006 10:53:12 AM
 * Modified: 4/21/2006 10:53:12 AM
 * Purpose:
 * Purpose: 
 * Create by: Webb.SmartCoder
 * Create by: Webb.SmartCoder
 ***********************************************************************/
 ***********************************************************************/

 using System;
using System;
 using System.Data;
using System.Data;
 using Webb.PublicControls;
using Webb.PublicControls;

 namespace Webb.SmartCode
namespace Webb.SmartCode
 {
{
 public class new_class
    public class new_class
 {
    {
 Fields
        Fields

 Properties
        Properties

 /// <summary>
        /// <summary>
 ///AddToDB
        ///AddToDB
 ///</summary>
        ///</summary>
 public void AddToDB()
        public void AddToDB()
 {
        {

 // To do implement you code
            // To do implement you code
 }
        }
 /// <summary>
        /// <summary>
 ///LoadData
        ///LoadData
 ///</summary>
        ///</summary>
 public void LoadData()
        public void LoadData()
 {
        {
 // To do implement you code
            // To do implement you code
 }
        }
 }
    }
 }
}

最后的设计模式,而且代码已经初步形成!想想,用这样的设计模式来开发项目应该还是不错的。当然还关于Form的设计图。

============================================================
我终于迫不及待想发点东西上来了,这是初步的UI,应该还可以。关于代码生成的结构就以上面的UML模式暂时定下来了。这里的设计模式中还保留了一些没完成的设计,例如,关于模板类或者接口,都没有完成,如果可能,完全可以用模板生成Java或者C++的代码。
当然,在后期的设计中,还可以添加一些UI层的代码设计,其实这次的设计完全是基于对UML架构的学习而开发的,希望能与大家一起讨论学习。
下面的是暂时的界面。
 
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。
简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。
第二次修改以及按照这样的模式写了一些代码。。。。。。当然,也还存在一些问题。。。
这是用来生成的代码的一个测试函数,应该是很简单的了,当然,与数据库连接以及一些UI层,都可以后来再慢慢的做了。
 private void button1_Click(object sender, System.EventArgs e)
        private void button1_Click(object sender, System.EventArgs e) {
        { CSClass m_class = new CSClass();
            CSClass m_class = new CSClass(); m_class.Name    = "new_class";
            m_class.Name    = "new_class"; m_class.Namespace    = "Webb.SmartCode";
            m_class.Namespace    = "Webb.SmartCode"; FunctionCollection m_functions    = m_class.Functions as FunctionCollection;
            FunctionCollection m_functions    = m_class.Functions as FunctionCollection; m_functions.Add(new CSFunction(CSFunction.FunctionType.AddToDB));
            m_functions.Add(new CSFunction(CSFunction.FunctionType.AddToDB)); m_functions.Add(new CSFunction(CSFunction.FunctionType.LoadData));
            m_functions.Add(new CSFunction(CSFunction.FunctionType.LoadData)); FieldsCollection m_field        = m_class.Fields as FieldsCollection;
            FieldsCollection m_field        = m_class.Fields as FieldsCollection; m_field.Add(new Field("c_id"));
            m_field.Add(new Field("c_id")); m_field.Add(new Field("c_loginName"));
            m_field.Add(new Field("c_loginName")); m_field.Add(new Field("c_email"));
            m_field.Add(new Field("c_email")); m_field.Add(new Field("c_address"));
            m_field.Add(new Field("c_address"));
 MemoryStream m_stream    = new MemoryStream();
            MemoryStream m_stream    = new MemoryStream(); TextWriter m_writer        = new StreamWriter(m_stream);
            TextWriter m_writer        = new StreamWriter(m_stream); m_class.RenderCode(m_writer);
            m_class.RenderCode(m_writer); m_writer.Flush();
            m_writer.Flush(); byte[] m_codeData        = m_stream.ToArray();
            byte[] m_codeData        = m_stream.ToArray(); this.richTextBox1.Text    = System.Text.Encoding.Default.GetString(m_codeData);
            this.richTextBox1.Text    = System.Text.Encoding.Default.GetString(m_codeData); }
        }生成的代码为:

 /***********************************************************************
/*********************************************************************** * Module:
 * Module:   * Author:  Wu.Country
 * Author:  Wu.Country * Modified: 4/21/2006 10:53:12 AM
 * Modified: 4/21/2006 10:53:12 AM * Purpose:
 * Purpose:  * Create by: Webb.SmartCoder
 * Create by: Webb.SmartCoder ***********************************************************************/
 ***********************************************************************/
 using System;
using System; using System.Data;
using System.Data; using Webb.PublicControls;
using Webb.PublicControls;
 namespace Webb.SmartCode
namespace Webb.SmartCode {
{ public class new_class
    public class new_class {
    { Fields
        Fields
 Properties
        Properties
 /// <summary>
        /// <summary> ///AddToDB
        ///AddToDB ///</summary>
        ///</summary> public void AddToDB()
        public void AddToDB() {
        {
 // To do implement you code
            // To do implement you code
 }
        } /// <summary>
        /// <summary> ///LoadData
        ///LoadData ///</summary>
        ///</summary> public void LoadData()
        public void LoadData() {
        { // To do implement you code
            // To do implement you code
 }
        } }
    } }
}
最后的设计模式,而且代码已经初步形成!想想,用这样的设计模式来开发项目应该还是不错的。当然还关于Form的设计图。
============================================================
我终于迫不及待想发点东西上来了,这是初步的UI,应该还可以。关于代码生成的结构就以上面的UML模式暂时定下来了。这里的设计模式中还保留了一些没完成的设计,例如,关于模板类或者接口,都没有完成,如果可能,完全可以用模板生成Java或者C++的代码。
当然,在后期的设计中,还可以添加一些UI层的代码设计,其实这次的设计完全是基于对UML架构的学习而开发的,希望能与大家一起讨论学习。
下面的是暂时的界面。
    ================================
/\_/\
(=^o^=) Wu.Country@侠缘
(~)@(~) 一辈子,用心做一件事!
--------------------------------
学而不思则罔,思而不学则怠!
================================
/\_/\
(=^o^=) Wu.Country@侠缘
(~)@(~) 一辈子,用心做一件事!
--------------------------------
学而不思则罔,思而不学则怠!
================================
posted on 2006-04-18 17:34 Wu.Country@侠缘 阅读(821) 评论(1) 收藏 举报
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号