您的位置:首页 > 运维架构 > 网站架构

代码生成器(一)(基于接口的工厂模式的三层架构)

2007-02-27 14:06 344 查看
春节在家无聊,看见别人用的代码生成器,代码生成规范和工整,自己也写了一个基于接口的工厂模式的代码生成器.

一直偶都没有发现CSDN如何打包压缩文件.只能把部分代码共享出来. 如果需要参考所有源代码,请联系作者.

生成层的代码如下:


using System;


using System.IO;


using System.Text;


using System.Configuration;


namespace CodeManage.Operate




...{




/**//// <summary>


/// GenerationCode 的摘要说明。


/// </summary>


public class GenerationCode




...{


protected static string DbName =ConfigurationSettings.AppSettings["DbName"];


public GenerationCode()




...{


//


// TODO: 在此处添加构造函数逻辑


//


}




/**//// <summary>


/// 生成BLL层代码


/// </summary>




生成BLL层代码#region 生成BLL层代码


public static void GenerationBllCode(string tablename)




...{


string tableinfo="";


string[] Content = new string[5];


StringBuilder strBLL = new StringBuilder();


tableinfo=GenerationAssistant.getBllTableInfo(tablename);


Content[0] =tableinfo.Substring(0,tableinfo.IndexOf(",")); //表名称


Content[1] =tableinfo.Substring(tableinfo.IndexOf(",")+1,tableinfo.Length-(tableinfo.IndexOf(",")+1)); //表中文说明


Content[2] =System.DateTime.Now.ToString(); //代码生成日期


Content[3] ="北京江河瑞通有限责任公司"; //版权信息


Content[4] =DbName; //数据库名


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/BLL.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strBLL.Append(oneline+" ");


}


sr.Close();


}


if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".BLL") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".BLL");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".BLL/" + Content[0] + ".cs";


for (int i = 0; i < 5; i++)




...{


strBLL.Replace("$BLLkey[" + i + "]", Content[i]);


}




FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strBLL);


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationBLLCode");


}


}


#endregion






/**//// <summary>


/// 生成DALFactory层代码


/// </summary>




生成DALFactory层代码#region 生成DALFactory层代码


public static void GenerationDALFactoryCode(string strtablename)




...{


string[] Content = new string[4];


StringBuilder strDALFactory = new StringBuilder();


Content[0] =System.DateTime.Now.ToString(); //代码生成日期


Content[1] ="北京江河瑞通有限责任公司"; //版权信息


Content[2] =DbName; //数据库名


string strCreateIDAL="";


string[] TableInfo=strtablename.Split(',');




for(int j=0;j<=TableInfo.Length-1;j++)




...{


strCreateIDAL+=GenerationAssistant.getIDAL(TableInfo[j]);


}


Content[3] =strCreateIDAL;


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/DALFactory.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strDALFactory.Append(oneline+" ");


}


sr.Close();


}


if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory/DataAccess.cs";




if (File.Exists(fname))




...{


File.Delete(fname);


}


for (int i = 0; i < 4; i++)




...{


strDALFactory.Replace("$DALFactoryKey[" + i + "]", Content[i]);


}


FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strDALFactory.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationDALFactoryCode");


}




//生成DataCache代码。


StringBuilder strDataCache = new StringBuilder();


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/DataCache.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strDataCache.Append(oneline+" ");


}


sr.Close();


}


if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory/DataCache.cs";




if (File.Exists(fname))




...{


File.Delete(fname);


}


for (int i = 0; i < 4; i++)




...{


strDataCache.Replace("$DataCacheKey[" + i + "]", Content[i]);


}


FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strDataCache.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationDALFactoryCode");


}


}


#endregion






/**//// <summary>


/// 生成IDAL层代码


/// </summary>




生成IDAL层代码#region 生成IDAL层代码


public static void GenerationIDALCode(string tablename)




...{


string[] Content = new string[4];


StringBuilder strIDAL = new StringBuilder();


Content[0] =System.DateTime.Now.ToString(); //代码生成日期


Content[1] ="北京江河瑞通有限责任公司"; //版权信息


Content[2] =DbName; //数据库名


Content[3] =tablename;


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/IDAL.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strIDAL.Append(oneline+" ");


}


sr.Close();


}




if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".IDAL") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".IDAL");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".IDAL/"+tablename+".cs";




if (File.Exists(fname))




...{


File.Delete(fname);


}




for (int i = 0; i < 4; i++)




...{


strIDAL.Replace("$IDALkey[" + i + "]", Content[i]);


}




FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strIDAL.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationIDALCode");


}


}


#endregion






/**//// <summary>


/// 生成Model层代码


/// </summary>




生成Model层代码#region 生成Model层代码


public static void GenerationModelCode(string tablename)




...{


string[] Content = new string[5];


StringBuilder strModel = new StringBuilder();


Content[0] =System.DateTime.Now.ToString(); //代码生成日期


Content[1] ="北京江河瑞通有限责任公司"; //版权信息


Content[2] =DbName; //数据库名


Content[3] =tablename; //表名


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/Model.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strModel.Append(oneline+" ");


}


sr.Close();


}




if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".Model") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".Model");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".Model/"+tablename+".cs";




if (File.Exists(fname))




...{


File.Delete(fname);


}


Content[4] =GenerationAssistant.getPrivateValue(tablename);


for (int i = 0; i < 5; i++)




...{


strModel.Replace("$Modelkey[" + i + "]", Content[i]);


}




FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strModel.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationModelCode");


}


}


#endregion






/**//// <summary>


/// 生成SQLServerDAL层代码


/// </summary>




生成SQLServerDAL层代码#region 生成SQLServerDAL层代码


public static void GenerationSQLServerDALCode(string tablename)




...{


string[] Content = new string[11];


StringBuilder strSQLServerDAL = new StringBuilder();


Content[0] =System.DateTime.Now.ToString(); //代码生成日期


Content[1] ="北京江河瑞通有限责任公司"; //版权信息


Content[2] =DbName; //数据库名


Content[3] =tablename; //表名


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/SQLServerDAL.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strSQLServerDAL.Append(oneline+" ");


}


sr.Close();


}




if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL/"+tablename+".cs";




if (File.Exists(fname))




...{


File.Delete(fname);


}


Content[4] =Operate.GenerationAssistant.GetMaxKey(tablename);


Content[5] =Operate.GenerationAssistant.GetExists(tablename);


Content[6] =Operate.GenerationAssistant.GetAdd(tablename);


Content[7] =Operate.GenerationAssistant.GetUpdate(tablename);


Content[8] =Operate.GenerationAssistant.GetDelete(tablename);


Content[9] =Operate.GenerationAssistant.GetModel(tablename);


Content[10] =Operate.GenerationAssistant.GetList(tablename);


for (int i = 0; i < 11; i++)




...{


strSQLServerDAL.Replace("$SQLServerDALkey[" + i + "]", Content[i]);


}




FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strSQLServerDAL.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationSQLServerDALCode");


}


//生成DbHelperSQL代码。


StringBuilder strDbHelperSQL = new StringBuilder();


try




...{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/DbHelperSQL.CST",System.Text.Encoding.Default))




...{


string oneline;


while ((oneline= sr.ReadLine()) != null)




...{


strDbHelperSQL.Append(oneline+" ");


}


sr.Close();


}


if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL") == false)




...{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL/DbHelperSQL.cs";




if (File.Exists(fname))




...{


File.Delete(fname);


}


for (int i = 0; i < 3; i++)




...{


strDbHelperSQL.Replace("$SQLServerDALkey[" + i + "]", Content[i]);


}


FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




...{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strDbHelperSQL.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




...{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationSQLServerDALCode");


}


}


#endregion




}








}

简单模版本文件如下(提供一个模版例子):


/*+----------------------------------------+


| 类 名称:表映射的属性信息


| 功能说明:$Modelkey[3]属性信息


| 维护记录:Y/A


| 代码生成:代码生成器


| 联系方式:zlp@richway.cc


| 创建日期:$Modelkey[0]


| 版权信息:版权所有 2007 $Modelkey[1]


+-----------------------------------------+*/


using System;


namespace $Modelkey[2].Model


{


/// <summary>


/// 实体类$Modelkey[3]。(属性说明自动提取数据库字段的描述信息)


/// </summary>


public class $Modelkey[3]


{


public $Modelkey[3]()


{}


#region Model


$Modelkey[4]


#endregion Model


}


}





调用如下(生成SQLServerDAL层代码):


using System;


using System.Collections;


using System.ComponentModel;


using System.Data;


using System.Drawing;


using System.Web;


using System.Web.SessionState;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.HtmlControls;


using System.IO;


using System.Text;




namespace CodeManage




......{




/**//**//**//// <summary>


/// WebForm1 的摘要说明。


/// </summary>


public class WebForm1 : System.Web.UI.Page




......{




protected static string DbName =System.Configuration.ConfigurationSettings.AppSettings["DbName"];


private void Page_Load(object sender, System.EventArgs e)




......{


// 在此处放置用户代码以初始化页面


string DbName="Reservoir",tablename="Log";


string[] Content = new string[11];


StringBuilder strSQLServerDAL = new StringBuilder();


Content[0] =System.DateTime.Now.ToString(); //代码生成日期


Content[1] ="北京江河瑞通有限责任公司"; //版权信息


Content[2] =DbName; //数据库名


Content[3] =tablename; //表名


try




......{


using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "SQLServerDAL.CST",System.Text.Encoding.Default))




......{


string oneline;


while ((oneline= sr.ReadLine()) != null)




......{


strSQLServerDAL.Append(oneline+" ");


}


sr.Close();


}




if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + ""+DbName+".SQLServerDAL") == false)




......{


System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + ""+DbName+".SQLServerDAL");


}


string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + ""+DbName+".SQLServerDAL est.cs";




if (File.Exists(fname))




......{


File.Delete(fname);


}


Content[4] =Operate.GenerationAssistant.GetMaxKey(tablename);


Content[5] =Operate.GenerationAssistant.GetExists(tablename);


Content[6] =Operate.GenerationAssistant.GetAdd(tablename);


Content[7] =Operate.GenerationAssistant.GetUpdate(tablename);


Content[8] =Operate.GenerationAssistant.GetDelete(tablename);


Content[9] =Operate.GenerationAssistant.GetModel(tablename);


Content[10] =Operate.GenerationAssistant.GetList(tablename);


for (int i = 0; i < 11; i++)




......{


strSQLServerDAL.Replace("$SQLServerDALkey[" + i + "]", Content[i]);


}




FileInfo finfo = new FileInfo(fname);


using (FileStream fs = finfo.OpenWrite())




......{


StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));


sw.WriteLine(strSQLServerDAL.ToString());


sw.Flush();


sw.Close();


}


}


catch (Exception err)




......{


Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationSQLServerDALCode");


}


}












Web 窗体设计器生成的代码Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码


override protected void OnInit(EventArgs e)




......{


//


// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。


//


InitializeComponent();


base.OnInit(e);


}






/**//**//**//// <summary>


/// 设计器支持所需的方法 - 不要使用代码编辑器修改


/// 此方法的内容。


/// </summary>


private void InitializeComponent()




......{


this.Load += new System.EventHandler(this.Page_Load);


}


#endregion


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: