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

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

一直偶都没有发现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 窗体设计器生成的代码
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值