NToggery 开发之旅(02) - 代码生成

NToggery 开发之旅(02) - 代码生成

 

项目名称:NToggery

项目简介:服装进销存基础平台

程序版本:2.2.61206

作者:Clark Chan

博客:http://clarkchan.cnblogs.com/

邮箱:taeheesoft#163.com

运行环境:Microsoft Visual Studio 2005Microsoft SQL Server 2000

NToggery名称含义:N多服装店都选用的,基于.NET Framework的服装进销存基础平台。(N多,就是很多的意思)。

 

引言:

工欲善其事,必先利其器。要做好一件事情,先为她准备好环境是必要的。俗话说:磨刀不误砍柴功,Sorry~~我磨的柴刀已经耽误了切豆腐。最近园子里很多人谈论代码生成器,我也来插一脚。上周末把我的代码生成器CodingBuilder改成了基于模版引擎的,今天简单聊聊。

 

正文:

      最初我的代码生成器是逻辑式的(NToggery 开发之旅(01) - 程序架构),生成代码的逻辑全部写死在程序中了。在和的讨论中得知,基于模版引擎的生成器,才是好的生成器。于是尝试着去修改CodingBuilder。第一步就是解析、翻译文本了。在我的随笔(【原创源码】(03):利用简单递归算法,实现文本匹配、翻译。)中做了尝试。将输入的模版文本代码,要转换、翻译成目标C#源代码。第二步是将翻译后的C#源代码,动态的运行(运行过程会完成模版代码的执行)。第三步就是输出动态运行的结果代码(你所需要的代码生成器结果)。动态解析代码+运行代码,就构成了模版+引擎。模版引擎是第三方编写的,在这里要特别感谢幸运草提供的信息,我才能完成这次修改。

关于动态解析代码和运行代码,使用了Rick Strahl的一篇文章(Dynamically executing code in .Net)、以及dstang2000的文章(A tool for dynamic compile and run of C# or VB.NET code)的技术。有兴趣的朋友可以看看。申明:关于模版引擎,使用了第三方的代码,我仅仅是根据自己的需求做了修改和应用,模版引擎归原作者。


   下面我用一个
Sample来演示CodingBuilder编写模版和输出代码。


1,
运行CodingBuilder.UI.exe,她是一个SQL Server 2000查询分析器的界面,操作起来和查询分析器一样简单,输入数据源地址,选择连接方式,输入登录帐户,回车。

CB_01.jpg

2,
登录到数据库之后,左边显示了2个控制表,对象浏览器和模版。首先选择数据库,如:NToggery2。单击树或者单击下拉列表都可以选定数据库,如下面2图:

CB_02_01.jpg

CB_02_02.jpg


3,
切换到模版控制表(Templates),双击模版树,可以读取默认模版。

CB_03.jpg 


4,
Input中输入以下文本(Sample.cst):

CB_04.jpg
在上图中,可以看到
Sample.cst包含3块文本。

(1)       初始化:创建变量和表结构(TableSchema)。

(2)       执行循环:利用for循环语句输出私有成员语句“private int _demoId;”。

(3)      调用方法:调用方法(DeclareParameters(TableSchema dbm)),输出字符串“123456789”。


5,
下图中是生成以后的C#代码:

CB_05.jpg 


6,
其中最重要的就是TableSchema.AllColumns[i],它的类型是:ColumnSchema。下面贴出ColumnSchema的基本属性。

CB_ColumnSchema.jpg

 


   
   使用说明:
CodingBuilder中有一个checkboxUse template engine,默认是选中的,意思是默认加载模版、执行模版,采用模版引擎方式。如果取消选中,意思是加载模版、执行模版,采用参数逻辑方式。在程序的工作目录下面有个folderTemplates”,存放了2种方式下的4类模版(ModelIDALSQLServerDALBLL)。另外NToggery v2.2.61206中使用的4C#类由CodingBuilder自动生成的。大家可以通过Demo表测试生成器的代码有效性。

 

总结与思考:

      CodingBuilder仍然是比较简单的轻量级代码生成器。数据库元数据的形容也不够充分(ColumnSchema对象、TableSchema对象、等)。现在仅仅是为了NToggery进销存基础平台而设计开发的,所以不算通用的代码生成器。比如为NToggery而设计的枚举支持:private e_IsValid _isValid = e_IsValid.None;。其中的e_IsValid就是一个枚举类型:public enum e_IsValid { None = 0,有效= 1,无效= 2 }。另外:模版文件“Engine_SQLServerDAL.cst”中使用了较多的方法代码,而且方法都是static静态方法!

也有待改进。欢迎大家对NToggery基础设计架构提出宝贵意见!

 
   
最后请大家多多指教,欢迎提出Bug和建议。谢谢!

 

 

2006/12/06 Clark Chan


 

源文件下载(1.65 MB)

《文件结构说明》
辅助代码生成工具:
\\Tools\CodingBuilderSetup_v3.2.61206\CodingBuilderSetup.msi

相关的备份文件:
\\BACKUP\*.*

数据库文件:
\\Database\NToggery2_Data.MDF
\\Database\NToggery2_Log.LDF

源代码工程:
\\Src\NToggery.sln

重要文档:
\\Src\License.txt
\\Src\ReadMe.txt
\\Src\WhatsNew.txt

\\Documents\NToggery 开发之旅(01) - 程序框架.doc
\\Documents\NToggery 开发之旅(02) - 代码生成.doc


注意!在博客园社区以外转载,必须注明:
作者:Clark Chan
和原文出处:http://clarkchan.cnblogs.com/
否则谢绝转载!

posted on 2006-12-06 19:21  Clark Chan  阅读(1546)  评论(6编辑  收藏  举报

导航