還從沒有用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架構的學習而開發的,希望能與大家一起討論學習。
下面的是暫時的介面。