基于模板引擎的代码生成器Smart Code预览

概述

国内写代码生成器的不少,可以说很多公司都有自己的代码生成器,好用的却不多,可定制性不强,始终不及CodeSmith或MyGeneration。最近园子里也发了不少的代码生成器,其中henryCodeFactory的VS插件很值得推荐。我个人最近也在写一个代码生成器,开始想写一个能满足公司项目基本要求的就可以了,后来觉的还是通用的比较好,于是就有了Smart Code。看到这么多朋友都发了代码生成器,我也提前show一把,不过我这个目前还在开发中,希望这个月底可以发布,到时将会提供下载。

特性简介

1.整体界面风格类似于Visual Studio。

TerryLee_SmartCode_003

2.完全基于自定义的模板引擎,模板使用ASP.NET的标记和C#语法进行编写。

TerryLee_SmartCode_001

模板编写完全类似与CodeSmith,可以使用Import导入命名空间,使用Assembly添加程序集,使用Include包含其他的模板文件,使用Property声明属性。同时,也可以使用<script runat="temlate"></script>编写代码片段。

TerryLee_SmartCode_002

3.支持属性的自定义,以及生成界面控件的配置。

数据表属性:

TerryLee_SmartCode_007

字段属性:

TerryLee_SmartCode_008

4.可以生成多种类型的项目,并且支持自定义项目类型。

TerryLee_SmartCode_004

5.生成的代码为完整的VS项目。

TerryLee_SmartCode_005

6.生成代码预览。

TerryLee_SmartCode_006

结束语

Smart Code目前仍在开发中,开发完成后,将会免费提供下载。同时,如果大家有什么好的建议和想法,欢迎发mail给我,非常感谢。
作者:TerryLee
出处:http://terrylee.cnblogs.com

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2007-12-04 00:29 TerryLee 阅读(5042) 评论(115)  编辑 收藏 网摘 所属分类: [13]  代码生成

  回复  引用    
#1楼 2007-12-04 00:55 | pixyosft [未注册用户]
太niu b了。

感觉主要吸引人的是怎么去模拟vs界面。而不是代码模板了。
  回复  引用    
#2楼 2007-12-04 00:58 | pixyosft [未注册用户]
不过有一事一直不明白,为什么你们喜欢用DAl, BLL之类的语言。这个我在j2ee见过,是不是企业级持久层的术语?

感觉很不习惯。我搞项目,直接就使用持久层、ORM之类的。controller的数据(DataTable)传递给持久层(Insert(DataTable))就完成数据库操作了。没有见过DAL/BLL。
  回复  引用  查看    
#3楼 [楼主]2007-12-04 00:59 | TerryLee      
@pixyosft
模拟VS界面的是使用开源项目WeifenLuo.WinFormsUI.Docking
  回复  引用  查看    
#4楼 [楼主]2007-12-04 01:01 | TerryLee      
@pixyosft
只是一个名称而已,SmartCode就是考虑到不同的用户会有不同的编码习惯,所以才会有基于模板引擎,可以根据自己的习惯定制模板啊:)
  回复  引用    
#5楼 2007-12-04 01:10 | allentranks [未注册用户]
期待ing~~~~~
  回复  引用  查看    
#6楼 [楼主]2007-12-04 01:19 | TerryLee      
@allentranks
希望我可以早点开发完成:)
  回复  引用  查看    
#7楼 2007-12-04 08:35 | 戏水      
掌柜: 希望能在模板中提供一些函数,来自定义某个位置上名称的大小写
比如我数据库中字段名为UserName
那我希望生成的代码中 可以展示为userName 或者 username 或者USERNAME
当然还需要 首字母大写 等等的功能 。希望能实现。这对我定义统一的代码风格很重要 :)
  回复  引用  查看    
#8楼 2007-12-04 08:38 | kiler      
可以考虑直接使用Mygeneration的一些元数据类库以及模板解析库,这样可以节约很多时间。
  回复  引用  查看    
#9楼 [楼主]2007-12-04 08:44 | TerryLee      
@戏水
这个功能可以在模板中实现,你可以定义自己的方法,然后放在一个模板文件中,其他模板中使用Include包含进来就可以了。

不过你提的想法很好,可以考虑提供一些默认的方法:)
  回复  引用  查看    
#10楼 [楼主]2007-12-04 08:45 | TerryLee      
@kiler
会不会有版权问题?
  回复  引用  查看    
#11楼 2007-12-04 08:50 | henry      
NVelocity的模板类型约束并没这么严格,所以在自定义对象或方法很容易就能切入到所有模板里并使用.
针对操作型生成代码应该是一个不错的方向,如:MSSQL视图构建器做成插件设置后直接生成code function这种方式工没有受代码结构所限制,针项目型的代码生成对代码结构的约束性太强了.
  回复  引用  查看    
#12楼 2007-12-04 09:00 | oec2003      
支持楼主,期待中
  回复  引用  查看    
#13楼 2007-12-04 10:05 | 预备役中尉      
单从表面看个人意见:
1.产生的是一个.SLN文件,而目前项目开发大都是团队协作,因此开发员签出会互相制约,不能保证最小编译单元的个人化.
2.楼主在构造函数中进行数据访问对象的实例化感觉不妥,本人在实际中遇到此种方式会出现问题.
3.等看到完整结构图再切磋.
  回复  引用  查看    
#14楼 [楼主]2007-12-04 10:24 | TerryLee      
@预备役中尉
1.个人认为代码生成器并不能代替开发人员,只能在一定程度上提供搞开发人员的效率,所以不要指望代码生成器能完成所有的工作。

2.我上面已经说了,完全基于模板引擎,在实际使用中,各个团队使用的方式都不会一样,完全可以通过修改模板来实现,没必要一定就按照这种方式去做。

3.至于第三点嘛就先不回复了:)


  回复  引用  查看    
#15楼 [楼主]2007-12-04 10:27 | TerryLee      
@henry
针对项目型的代码生成对代码的约束是很强,可以通过自定义模板也能解决一些问题。
  回复  引用  查看    
#16楼 2007-12-04 10:45 | kiler      
@TerryLee

应该没有版权问题,Mygeneration现在是开源的,遵循BSD License。

关于戏水说的功能,我觉得可以这么考虑:

提供一些系统内置函数或者标签来统一代码风格;

如<%= ToCamelCase("sdasdasdasd") %>
<%= ToPascalCase("sdasdasdasd") %>

  回复  引用  查看    
#17楼 2007-12-04 14:08 | 罗爱军      
学习学习。。TerryLee的文章始终走在技术的最前沿呀,呵呵。
  回复  引用  查看    
#18楼 2007-12-04 15:08 | RanKang      
你不是要考研的吗?
怎么有这么多时间自己做东西呢?
  回复  引用  查看    
#19楼 [楼主]2007-12-04 17:07 | TerryLee      
@kiler
嗯,这个想法不错,我争取加上:)
  回复  引用  查看    
#20楼 [楼主]2007-12-04 17:12 | TerryLee      
@罗爱军
争取赶上,但总是觉的赶不上:)
  回复  引用  查看    
#21楼 [楼主]2007-12-04 17:15 | TerryLee      
@RanKang
已经考完了
  回复  引用    
#22楼 2007-12-04 19:28 | jt [未注册用户]
关心代码编辑器的实现,是不是也有智能感知等功能,如何实现的,看起来很漂亮
  回复  引用  查看    
#23楼 2007-12-04 19:31 | kiler      
@TerryLee

你这个界面怎么做的啊,是不是用的vs2008 shell?
  回复  引用  查看    
#24楼 [楼主]2007-12-04 19:31 | TerryLee      
@jt
编辑器用的是ICSharpCode.TextEditor,目前没有智能感知的功能。
  回复  引用  查看    
#25楼 [楼主]2007-12-04 19:32 | TerryLee      
@kiler
没有啊,用的是开源的WeifenLuo.WinFormsUI.Docking
  回复  引用    
#26楼 2007-12-04 19:46 | jt [未注册用户]
哦,看来博主美工技术也不错,让大家都误会了
  回复  引用  查看    
#27楼 [楼主]2007-12-04 20:06 | TerryLee      
@jt
呵呵,美工水平一般,根本不入流:)
  回复  引用    
#28楼 2007-12-05 09:17 | else [未注册用户]
TerryLee ,我要拜師呀,怎麼聯繫你
  回复  引用  查看    
#29楼 [楼主]2007-12-05 09:57 | TerryLee      
@else
拜师可不敢当:)

blog右边有我的Email。
  回复  引用  查看    
#30楼 2007-12-05 10:55 | lzlynn      
我汗~狂崇拜一下~
  回复  引用  查看    
#31楼 2007-12-05 10:57 | lzlynn      
关注您的创意
  回复  引用  查看    
#32楼 2007-12-05 11:06 | lzlynn      
您为我打开了更大的视野,从项目的开发,到工具的自架构..net的魅力又一次让我震撼!
  回复  引用    
#33楼 2007-12-05 15:15 | gakaki [未注册用户]
我觉得虽然代码生成都很不错,但是唯独对界面层和数据层的传输那段代码没有生成工具生成

类似于
textbox1.text = Product.Name 这样的生成工具很少

我建议字段里在加上一个客户端验证的 正则表达式 用来生成js客户端验证
  回复  引用  查看    
#34楼 2007-12-05 15:48 | kiler      
@gakaki

汗,这个就是自己写模板就行了,一点也不难。

  回复  引用  查看    
#35楼 2007-12-05 20:25 | 高海东      
建议支持最新的c#3.0 vs2008 linq
  回复  引用    
#36楼 2007-12-06 07:49 | jsq [未注册用户]
我想在cs开头,加一个这个模块的功能,谁开发和改动的
有没有这样的宏代码。
应该怎么加,我看sharpplus有,vs2005好像没有。
  回复  引用  查看    
#37楼 2007-12-06 13:49 | Fencer      
楼主加油,到时候就用你的开发了,呵呵
  回复  引用  查看    
#38楼 2007-12-06 16:41 | 张荣华      
可以考虑兼容codesmith的模板
并且在发布时,楼主应先写几个模板。
  回复  引用  查看    
#39楼 [楼主]2007-12-06 23:06 | TerryLee      
@gakaki
这个编写模板啊~~~
  回复  引用  查看    
#40楼 [楼主]2007-12-06 23:06 | TerryLee      
@高海东
上面的新建项目对话框中已经有LINQ to SQL的项目了!
  回复  引用  查看    
#41楼 [楼主]2007-12-06 23:07 | TerryLee      
@Fencer
谢谢支持,我尽量做好
  回复  引用  查看    
#42楼 [楼主]2007-12-06 23:07 | TerryLee      
@张荣华
发布的时候怎么可能不带模板呢?-_-
  回复  引用  查看    
#43楼 2007-12-07 10:17 | Terry Dong      
期待ing。。。
以前一直再用codesmith,博主能否说一下,这个smart code 相对于codesmith的一些优缺点吗,两者都是基于模板的

一直关注楼主的博客,学习~~~呵呵
  回复  引用  查看    
#44楼 [楼主]2007-12-07 11:01 | TerryLee      
@Terry Dong
1.从模板语法上说,两者的语法非常相似,但是SmartCode只支持C#语言进行模板的编写(以后可能会扩展Vb.Net),而CodeSmith只是任何一种语言

2.CodeSmith支持编写模板时的智能提示功能,而SmartCode目前还做不到这一点。

3.SmartCode支持生成完整的解决方案,包括表、字段属性的可配置,这一点可能CodeSmith无法做到。

4.SmartCode是国产的,也是免费的:-)
  回复  引用  查看    
#45楼 2007-12-07 14:26 | Terry Dong      
@TerryLee
谢谢~~发布了一定试用下,呵呵
  回复  引用  查看    
#46楼 2007-12-07 15:42 | MLY      
俺用过动软的那个,感觉还成,请问这个跟动软的那个有什么区别和特殊的地方,总体方向是一样的吗
同时关注中:)
这个界面挺好看的说..
  回复  引用  查看    
#47楼 [楼主]2007-12-09 22:03 | TerryLee      
@MLY
1.SmartCode完全基于模板引擎,可以自行修改模板,而动软的好像没有提供;
2.生成的代码为完整的解决方案。
3.支持表、字段的属性配置。

  回复  引用  查看    
#48楼 2007-12-10 09:37 | 静水≈深流      
关 关关注一下
  回复  引用  查看    
#49楼 2007-12-10 10:03 | MLY      
基于模板的没用过......才疏学浅了.....
决定就拿楼主的这个开刀了....
  回复  引用  查看    
#50楼 2007-12-10 11:28 | WideWeide      
3.SmartCode支持生成完整的解决方案,包括表、字段属性的可配置,这一点可能CodeSmith无法做到。
----------------------------------
CodeSmith可以生成解决方案,比如NetTiers

表、字段属性好像还无法配置。PowerDesigner设计的配置信息似乎足够丰富了,可惜自定义模板太麻烦了:(
  回复  引用  查看    
#51楼 2007-12-10 12:44 | leoxu      
支持, 哈哈。 这个诱惑力挺大的。关注。
  回复  引用  查看    
#52楼 2007-12-11 10:56 | Clark Chan      
关注!

另外关于代码生成器如何循环的问题,我很有兴趣。
比如:用一个模版A+实体B,生成了代码C
如何用模版A+实体BDEFG,循环生成代码CHIJK。一直未能解决,期待能在学习到相关知识。

ps:看来年末新一轮的代码生成时代又来了,我也要开始拣起几月前的MDA生成器。主要是在做VS那棵解决方案树的常用操作,以及属性窗口显示和编辑。要是哪位大侠有开源的模型编辑代码(根据模型图维护实体字段)不妨介绍哈,谢谢。
  回复  引用  查看    
#53楼 2007-12-11 11:20 | HOH      
师兄,你用的那套图标在哪找的?能告诉我吗?或者发一分图标给我吗?hoh728@163.com
  回复  引用  查看    
#54楼 [楼主]2007-12-11 19:24 | TerryLee      
@MLY
希望我可以尽快发布
  回复  引用  查看    
#55楼 [楼主]2007-12-11 19:25 | TerryLee      
@WideWeide
嗯,我看了一下NetTiers,文件好多:)
  回复  引用  查看    
#56楼 [楼主]2007-12-11 19:25 | TerryLee      
@leoxu
呵呵
  回复  引用  查看    
#57楼 [楼主]2007-12-11 19:26 | TerryLee      
@Clark Chan
这个没有什么问题吧,循环调用模板就可以了啊,在模板中以实体作为输入参数就可以了:)
  回复  引用  查看    
#58楼 [楼主]2007-12-11 19:27 | TerryLee      
@HOH
图标是直接从VS上抓取的:)
  回复  引用  查看    
#59楼 2007-12-12 19:49 | 岁月如歌      
与Codesmith有什么区别?如果比Codesmith好用的话,我会考虑用你这个。
希望能导出Codesmith的模板。
  回复  引用  查看    
#60楼 [楼主]2007-12-12 21:51 | TerryLee      
@岁月如歌
1.从模板语法上说,两者的语法非常相似,但是SmartCode只支持C#语言进行模板的编写(以后可能会扩展Vb.Net),而CodeSmith支持任何一种语言

2.CodeSmith支持编写模板时的智能提示功能,而SmartCode目前还做不到这一点。

3.SmartCode是国产的,也是免费的,甚至会开源:)
  回复  引用  查看    
#61楼 2007-12-13 16:24 | 岁月如歌      
关注中,加油~加油~
  回复  引用    
#62楼 2007-12-13 17:48 | WaitdDing [未注册用户]
代码生成器的确可以减轻很多开发过程中的重复工作量.特别是能根据自定义的模板来定制更是很方便.我想请问下LZ,Smart Code有DeBug模板的功能吗?有的话,我想在编写模板的过程中可以减少编写的时间哦.
  回复  引用    
#63楼 2007-12-13 17:54 | WaitdDing [未注册用户]
LZ你好,刚刚在逛Code Project的时候无意中发现一篇文章,也是介绍Code Generateor的.那篇文章中提到的代码生成器的名字和你的很像:SmartCode.(中间无空格).我看了一下,从已经有的截图上看没有什么雷同的地方.但考虑到以后开源(LZ说是可能:^_^),我想软件的名称如果有雷同应该会有一些不大不小的麻烦的,希望LZ能够注意一下.
PS:附上URL:http://www.codeproject.com/KB/dotnet/SmartCode-Code_Generation.aspx
  回复  引用  查看    
#64楼 [楼主]2007-12-13 19:46 | TerryLee      
@岁月如歌
谢谢:)
  回复  引用  查看    
#65楼 [楼主]2007-12-13 19:48 | TerryLee      
@WaitdDing
谢谢,我也在考虑是不是该换个名字,等想好了再换吧,其实叫SmratCode的在我之前有两个代码生成器呢:)

Smart Code目前还没有提供Debug的功能,我最近正在看Visual Studio 2008 Shell,考虑是不是用它来实现呢?
  回复  引用    
#66楼 2007-12-13 22:14 | WaitdDing [未注册用户]
呵呵,相信LZ会想出好的解决方式的.VS2008还没有怎么用去,不过听倒是听得很多.
名字的话可以向园子里的兄弟征集一下啊,建议而已.
基于模板的技术我是很感兴趣的,希望有机会研究一下.

加油!!!!!
  回复  引用  查看    
#67楼 [楼主]2007-12-14 10:44 | TerryLee      
@WaitdDing
嗯,等完成后发布第一个版本,就向园子里的弟兄征询意见,呵呵
  回复  引用  查看    
#68楼 2007-12-15 15:51 | 助燃      
希望发布后能够自带连接oracle的三层模板,至少自动生成带参sql语句里面不会出现@
  回复  引用  查看    
#69楼 2007-12-17 16:13 | ColdDog      
我就关心WeifenLuo.WinFormsUI.Docking 这个怎么用的?
我怎么就是用不来呢?楼主帮我一下...
  回复  引用  查看    
#70楼 [楼主]2007-12-17 18:57 | TerryLee      
@ColdDog
下载后有带的Demo啊
  回复  引用  查看    
#71楼 2007-12-18 11:04 | WhyCome[at]live.cn       
现在进度如何了?
beta也好,等着试用呢!
(*^__^*) 嘻嘻……
  回复  引用  查看    
#72楼 2007-12-19 11:42 | ithurricane      
不错啊,到时候好好学习一下

  回复  引用    
#73楼 2007-12-20 17:47 | galactic [未注册用户]
I am waiting for it
  回复  引用  查看    
#74楼 2007-12-20 17:48 | OceanKIng      
非常期待
  回复  引用  查看    
#75楼 2007-12-23 11:50 | try      
codeproject上也有一个smartcode,2个非常类似
http://www.codeproject.com/KB/dotnet/SmartCode-Code_Generation.aspx
  回复  引用  查看    
#76楼 2007-12-24 11:32 | 舞指如歌      
支持李兄!
  回复  引用  查看    
#77楼 2007-12-26 19:00 | Gavin.W.Lai(赖文华)      
期待前辈的佳作!
  回复  引用  查看    
#78楼 2007-12-27 00:06 | Cruise      
期待ing...

  回复  引用    
#79楼 2007-12-28 15:51 | 你好ma [未注册用户]
迫不及待的想看看李兄的作品
  回复  引用  查看    
#80楼 2007-12-28 16:14 | ColdDog      
月底都到了,怎么还没讯息?
  回复  引用    
#81楼 2007-12-31 14:02 | winsonet [未注册用户]
感觉很不错啊,呵,不知什么时候能发布呢?
  回复  引用  查看    
#82楼 2008-01-03 13:18 | wenanry      
太niu b了。
  回复  引用  查看    
#83楼 2008-01-03 13:18 | wenanry      
太niu b了。加快速度开发吧,等着使用。
  回复  引用    
#84楼 2008-01-03 15:57 | EasyCode [未注册用户]
--引用--------------------------------------------------
TerryLee: @WaitdDing
谢谢,我也在考虑是不是该换个名字,等