zoukankan      html  css  js  c++  java
  • 试设计代码生成器模式[初步]

    还从没有用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
  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/WuCountry/p/378453.html
Copyright © 2011-2022 走看看