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


    还从没有用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
  • 相关阅读:
    WINDOWS 修改ROUTE命令
    SQL Server 索引 之 书签查找 <第十一篇>
    SQL Server索引的维护
    SQL Server索引语法 <第四篇>
    SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>
    SQL Server
    开发反模式
    开发反模式(GUID)
    开发反模式
    SQLServer 窗口函数
  • 原文地址:https://www.cnblogs.com/WuCountry/p/378453.html
Copyright © 2020-2023  润新知