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

来源:互联网 发布:商业网站的域名 编辑:程序博客网 时间:2024/04/28 11:38

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

一直偶都没有发现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层代码    

        
/// <summary>
        
/// 生成DALFactory层代码
        
/// </summary>

        生成DALFactory层代码    

        
/// <summary>
        
/// 生成IDAL层代码
        
/// </summary>

        生成IDAL层代码    

        
/// <summary>
        
/// 生成Model层代码
        
/// </summary>

        生成Model层代码    

        
/// <summary>
        
/// 生成SQLServerDAL层代码
        
/// </summary>

        生成SQLServerDAL层代码    

    }




}

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

/*+----------------------------------------+
| 类  名称:表映射的属性信息
| 功能说明:
$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 窗体设计器生成的代码
    }

}

原创粉丝点击