试设计代码生成器模式[初步]

还从没有用UNL工具设计过什么项目,这次算是个尝试。这是我对关于代码生成的设想。
上次也写了一个简单的代码生成器,只是对自己目前的项目所设计的,因此它根本不能用于其它项目及其它环境下。于是我自己又设计了一个。
UML_for_SmartCoder_1.JPG
简单的说明一下:
我是这样设想的,一般代码都是一个个的类存在的,因此以类为核心对代码生成进行架构。
一个类,无非包含了以下这些内容:
1、成员集合
2、属性集合
3、函数集合
4、其它
而一个类同时也会有一些相关的属性,做为接口存在。
在设计代码生成器的时候,对于不同的代码,用不同的类来实现。再加上Render方法的重载,应该是一个很好的架构思想。另外,这样的想法也只是一个初步尝试。


第二次修改以及按照这样的模式写了一些代码。。。。。。当然,也还存在一些问题。。。
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"));

            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

        
Properties

        
/// <summary>
        
///AddToDB
        
///</summary>

        public void AddToDB()
        
{

            
// To do implement you code
        }

        
/// <summary>
        
///LoadData
        
///</summary>

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

    }

}


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

============================================================
我终于迫不及待想发点东西上来了,这是初步的UI,应该还可以。关于代码生成的结构就以上面的UML模式暂时定下来了。这里的设计模式中还保留了一些没完成的设计,例如,关于模板类或者接口,都没有完成,如果可能,完全可以用模板生成Java或者C++的代码。
当然,在后期的设计中,还可以添加一些UI层的代码设计,其实这次的设计完全是基于对UML架构的学习而开发的,希望能与大家一起讨论学习。
下面的是暂时的界面。
CmartCoder1.JPG
原文地址:https://www.cnblogs.com/WuCountry/p/378453.html