試設計代碼產生器模式[初步]

來源:互聯網
上載者:User
還從沒有用UNL工具設計過什麼項目,這次算是個嘗試。這是我對關於代碼產生的設想。
上次也寫了一個簡單的代碼產生器,只是對自己目前的項目所設計的,因此它根本不能用於其它項目及其它環境下。於是我自己又設計了一個。

簡單的說明一下:
我是這樣設想的,一般代碼都是一個個的類存在的,因此以類為核心對代碼產生進行架構。
一個類,無非包含了以下這些內容:
1、成員集合
2、屬性集合
3、函數集合
4、其它
而一個類同時也會有一些相關的屬性,做為介面存在。
在設計代碼產生器的時候,對於不同的代碼,用不同的類來實現。再加上Render方法的重載,應該是一個很好的架構思想。另外,這樣的想法也只是一個初步嘗試。

第二次修改以及按照這樣的模式寫了一些代碼。。。。。。當然,也還存在一些問題。。。

這是用來產生的程式碼的一個測試函數,應該是很簡單的了,當然,與資料庫連接以及一些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#region Fields
        public string c_id;
        public string c_loginName;
        public string c_email;
        public string c_address;
        #endregion

        Properties#region Properties
        public string a
        {
            get{return this.c_id;}
            set{this.c_id    = value;}
        }
        public string b
        {
            get{return this.c_loginName;}
            set{this.c_loginName    = value;}
        }
        public string c
        {
            get{return this.c_email;}
            set{this.c_email    = value;}
        }
        public string d
        {
            get{return this.c_address;}
            set{this.c_address    = value;}
        }
        #endregion

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

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

最後的設計模式,而且代碼已經初步形成!想想,用這樣的設計模式來開發項目應該還是不錯的。當然還關於Form的設計圖。

============================================================
我終於迫不及待想發點東西上來了,這是初步的UI,應該還可以。關於代碼產生的結構就以上面的UML模式暫時定下來了。這裡的設計模式中還保留了一些沒完成的設計,例如,關於模板類或者介面,都沒有完成,如果可能,完全可以用模板產生Java或者C++的代碼。
當然,在後期的設計中,還可以添加一些UI層的代碼設計,其實這次的設計完全是基於對UML架構的學習而開發的,希望能與大家一起討論學習。
下面的是暫時的介面。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.