开源代码生成器:SmartCode

David Hayden那里获知CodeProject上的一个开源代码生成器SmartCode,对于不想花钱买CodeSmith的朋友来说,是个不错的选择,SmartCode完全基于模版代码生成(我一直认为基于模版的代码生成才是正道),它通过读取数据库Schema,可以为每张表或者每一个字段设置生成属性,有兴趣的朋友可以访问:

http://www.codeproject.com/useritems/SmartCode-Code_Generation.asp

SmartCode Studio主界面:



详情请访问:http://www.codeproject.com/useritems/SmartCode-Code_Generation.asp

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-11-25 19:56 TerryLee 阅读(19759) 评论(76) 编辑 收藏

 回复 引用   
#1楼 2006-11-25 21:11 javafun[未注册用户]
试验了一下,怎么都连不上,不知道为什么?
 回复 引用 查看   
#2楼[楼主] 2006-11-25 21:27 TerryLee      
@javafun
你说的是连不上数据库吗?

先用VS2005打开,重新编译后再运行,连接数据库看看

 回复 引用   
#3楼 2006-11-25 21:38 javafun[未注册用户]
是的,数据库连接每次都是失败,我用sql 2005 express edition,你能写一下具体里面应该填写什么值吗? 用Auth那种模式
 回复 引用 查看   
#4楼[楼主] 2006-11-25 21:48 TerryLee      
@javafun
Auth模式是哪种模式啊-_-

1.如果是Windwos认证模式
mssql2005/[服务器]/[数据库]

2.如果是混合认证模式
mssql2005/[用户名]:[密码]@[服务器])/[数据库]

 回复 引用   
#5楼 2006-11-25 22:04 风云[匿名]
好东西呀,很郁闷就是下载不下来!!!!
 回复 引用   
#6楼 2006-11-25 22:23 cnodin[未注册用户]
我下下来了,MS可用性很不好。当时试用了下,出现了好几个BUG,就再也没有进行下去了。
 回复 引用 查看   
#7楼[楼主] 2006-11-25 22:42 TerryLee      
@风云[匿名]
下不下来?

不能啊,需要登录的

 回复 引用 查看   
#8楼[楼主] 2006-11-25 22:43 TerryLee      
@cnodin
我在SQL Server2000下试了一下,感觉还可以的

最重要的是开源,对于喜欢研究代码生成的朋友也可以作为参考

 回复 引用 查看   
#9楼 2006-11-25 22:54 Wisdom-zh      
Macrobject CodeAuto 也放出了源代码,大家适当参考一下:
http://www.macrobject.com/en/codeauto/index.htm

 回复 引用 查看   
#10楼 2006-11-25 23:11 目标年薪三千万      
只是用数据库的表生成对象模型吗?还有什么功能?
这个也太逊了,半年前左右我就看到有个国产的开源软件,有以上功能,并且能自动生成3层驾构和7层驾构的基本调用代码,并有VB,C#互转功能,还凑合,是新手不错的工作(有帮人广告的嫌疑.....).
不过我还是喜欢用我的工具,因为上面的工具有二个缺点.1:没有拓展性,代码都写死的,想在基础调用层增加功能是不可能的.2:不能体现关系数据库之间的关系,表与表之间的连接统统是依靠表中的某个字段的,例如员工表,部门表,在写员工表的时候不是写"Public 部门表 Depart";,而是写"Public int Depart",然后再用通过猥琐的判断什么的来搞,违反OOA设计原则.
我的工具嘛,用Power Design附带的功能,在建好模型之后,所有的底层有规律的代码都通过脚本自动生成,虽然可能写脚本难度稍大点,但没有以上缺点.至于具体应用样例,我会近期写于我的Blog里.

 回复 引用   
#11楼 2006-11-25 23:13 虫虫[匿名][未注册用户]
我看了一下原代码并且测试了一下感觉还不错,但给我的感觉是基于"模板"的,不是基于"模板引擎"的,跟基于模板引擎的CodeSmith相比差一定的距离,
看来风云兄提到的代码生成器的设计方案应该有7种再增加一种基于模板的,哈哈.

大家可以看风云兄的http://www.cnblogs.com/netcasewqs/archive/2006/11/14/560201.html 这篇文章介绍代码生成器的设计方案,非常全非常详细.

看了晚上风云兄写的 NDO - 快速入门http://www.cnblogs.com/netcasewqs/archive/2006/11/25/572259.html 附件里的代码,里面也有代码生成工具,是一个基于Velocity 模板引擎的,功能很强应该和楼主的相比不错上下或者更强,如果风云再把UI 做得像SmartCode那样好,并且Generator的接口做瘦一点更容易扩充那样就好了,希望国内也出来一个比较好的通用的代码生成工具来.........

 回复 引用 查看   
#12楼[楼主] 2006-11-25 23:14 TerryLee      
@Wisdom-zh
嗯,谢谢提供:)

 回复 引用 查看   
#13楼[楼主] 2006-11-25 23:16 TerryLee      
@目标年薪三千万
1.SmartCode我觉得代码生成思想还是不错,基于模版的代码生成,比起现在很多直接生成固定代码的工具来说好多了

2.开源,对于自己开发代码生成的朋友是一个不错的参考,现在写代码生成器的不少,好的不多:)

同时也希望看到你的介绍。

 回复 引用 查看   
#14楼[楼主] 2006-11-25 23:18 TerryLee      
@虫虫[匿名]
没错,基于模版的,当然不能跟CodeSmith不能相比了,呵呵

// 是CodeProject上的一个开源代码生成工具,并不是我的^_^

 回复 引用 查看   
#15楼 2006-11-25 23:23 yunhuasheng      
谢谢!
 回复 引用 查看   
#16楼[楼主] 2006-11-25 23:31 TerryLee      
@yunhuasheng
好东西大家分享:)

 回复 引用   
#17楼 2006-11-26 10:05 小鬼[匿名][未注册用户]
确实不错,我喜欢开源的东东,就算不用也能从中找些代码段出来学习学习.
 回复 引用 查看   
#18楼[楼主] 2006-11-26 11:32 TerryLee      
@小鬼[匿名]
同感!

 回复 引用 查看   
#19楼 2006-11-26 12:56 Clark Chan      
@TerryLee
GAC dialog实在不知道选择那些,能告诉下吗?谢谢 其中找不到SmartCode101 那个程序集


刚才在这一楼出了2个bug,我估计TerryLee 应该看到我之前的评论了,但是现在被覆盖丢失了,汗~~~~

已经提交bug到:
http://www.cnblogs.com/dudu/archive/2006/11/24/571154.html

 回复 引用 查看   
#20楼[楼主] 2006-11-26 13:08 TerryLee      
@Clark Chan
设置好属性后,需要先加载模版的程序集,然后才可以生成代码

模版引擎确实是正道! ——严重同意!

 回复 引用 查看   
#21楼 2006-11-26 13:44 风云      
哈哈!我差一点被楼主“忽悠”了,基于“模板”的代码生成器,开玩笑而已,楼主不要建议呀!
@目标年薪三千万 
         说话有点过了,哈哈,SmartCode虽然很简单,但是从SmartCode里面可以折射出另外一种代码生成器的设计思想在里面,其思想是好的。
@虫虫[匿名] 
         虫虫兄分析的有一定的道理,NDO代码生成器和SmartCode 的功能差不多,但是 NDO代码生成器目前和 SmartCode相比在易用性和界面上差一点,
其思想和我NDO 中的NDOGenerator的代码生成器的框架有着很大的相似之处,具体谁好谁坏就不做比较了,仅仅说一下相似形和差异性而已。 
        都是在数据库元数据之上建立了元数据模型 
        都是基于模板插件的,可以灵活定制。但是NDO代码生成器的代码生成目前仅仅支持NDO的活动记录和普通的实体类以及monorail 和NDO相结合的活动记类,控制器,CRUD的视图代码。(除非用户自己更改VM模板)。SmartCode 的模板插件需要部署到GAC中,NDO的插件需要用配置文件配置。
SmartCode 的模板插件非常简单,也很灵活,你可以把代码输出逻辑完全写到插件中,也可以把代码输出逻辑和插件逻辑分开,这主要看用户怎样写插件了,关于该插件的写法的话题又非常多了,关于这方面的话题,虫虫兄推荐我的这篇文章也可以在这里用上http://www.cnblogs.com/netcasewqs/archive/2006/11/14/560201.html 。 
        从SmartCode身上NDO代码生成器可以吸收一点思想,NDO代码生成器的引擎骨架如虫虫说的瘦一点,不要局限于NDO和MONORAIL那么就可以做一个通用的代码生成器了。其实NDO代码生成器的骨架瘦身我以前都想到这个问题了,但是由于当时该创建生成器仅仅是为NDO和MONORAIL服务的,所以就肥了一点,哈哈,总之谢谢楼主给广大代码生成器爱好者提供了一个学习的例子!



 回复 引用 查看   
#22楼 2006-11-26 13:52 Clark Chan      
@风云
我打死不做通用代码生成器,哈哈。

 回复 引用 查看   
#23楼[楼主] 2006-11-26 14:00 TerryLee      
@风云
我下次应该对于“模版”加上高亮显示,呵呵

SmartCode对于爱好代码生成器的朋友来说的确是一个不错的例子

 回复 引用 查看   
#24楼[楼主] 2006-11-26 14:00 TerryLee      
@Clark Chan
为什么不做通用的呢?:)

 回复 引用 查看   
#25楼 2006-11-26 17:46 风云      
@TerryLee
TerryLee兄可以看看我和Clark Chan 兄的对话http://www.cnblogs.com/netcasewqs/archive/2006/11/14/560201.html 应该可以知道Clark Chan 兄的意思了,哈哈,是吗Clark Chan 兄?

 回复 引用 查看   
#26楼[楼主] 2006-11-26 18:42 TerryLee      
@风云
嗯,我看了一下,觉得有些问题

1.如果代码生成器只是针对具体的项目的话,那意义就不会很大,到最后可能鞍比马的代价还大。

2.使用别的代码生成器,我不认为学习成本有多高,CodeSmith功能够强大了吧?如果潜心研究,花一周时间学习足以应付项目中的代码生成,况且新版本的CodeSmith提供了大量的项目模版,稍加修改即可应用。

3.如果要开发自己的代码生成器,基于模版引擎的代码生成才是正道。

:)

 回复 引用 查看   
#27楼 2006-11-26 18:55 Clark Chan      
@TerryLee
做通用的太要时间了,累:(

@风云
还是风云兄了解,哈哈:)

 回复 引用 查看   
#28楼 2006-11-26 19:08 Clark Chan      
@TerryLee
1》CodeSmith实在太强大,虽然我没有成功生成一次代码。不过我不想依赖它,原因是它太牛,学习和维护的成本 对我的小项目实在不易(尤其维护代码还要靠CodeSmith~~~~)。

2》自己开发代码生成器,一定要开发基于模版引擎的才有点意义。

3》基于模版引擎的,很容易修改成通用的代码生成器(引擎出来了,只是时间的问题了)。时间啊,时间啊,为什么总这么快流逝呢~55555~~

ps:shoucao_66@兄已经在做基于模版引擎的 通用代码生成器了,支持他!

 回复 引用 查看   
#29楼[楼主] 2006-11-26 19:08 TerryLee      
@Clark Chan
:)

 回复 引用   
#30楼 2006-11-26 19:33 wang[未注册用户]
感觉MyGeneration也不错哦
 回复 引用 查看   
#31楼[楼主] 2006-11-26 19:35 TerryLee      
@wang
嗯,CodeSmith收费后,很多人都转向了MyGeneration

 回复 引用 查看   
#32楼 2006-11-27 08:43 KiddLee      
先谢了
 回复 引用 查看   
#33楼[楼主] 2006-11-27 08:53 TerryLee      
@KiddLee
:)

 回复 引用 查看   
#34楼 2006-11-27 09:32 数据绑定者      
我编译都编译不过去,怎么搞得

提示我一个@call的一个错误。晕

SmartCode到底怎么用啊,搞了半天不会生成,呵呵

 回复 引用   
#35楼 2006-11-27 11:13 shoucao[未注册用户]
代码生成器引擎已经有了基本功能,有兴趣的朋友可以到我的论坛去下载,刚刚有了基本功能,等可以满足基本需求之后向大家公开源代码,希望大家支持。
 回复 引用   
#36楼 2006-11-27 11:19 shoucao[未注册用户]
很报歉我的域名忘了交费现在已经不能访问。我将在园子内安个家。
 回复 引用 查看   
#37楼 2006-11-27 12:39 Clark Chan      
@shoucao
强烈支持!!

 回复 引用 查看   
#38楼 2006-11-27 12:51 Clark Chan      
@数据绑定者
me too,哈哈

 回复 引用 查看   
#39楼 2006-11-27 13:31 数据绑定者      
@Clark Chan

呵呵,有没有教程啊

怎么才能编译过去 ?

 回复 引用   
#40楼 2006-11-27 13:34 shoucao[未注册用户]
偶在园子里也安家了
 回复 引用 查看   
#42楼[楼主] 2006-11-27 17:24 TerryLee      
@数据绑定者
教程?不会吧,呵呵

看看上面那篇文章就差不多了

在我这儿编译没问题的

 回复 引用 查看   
#43楼 2006-11-30 12:38 纶巾客      
MyGeneration是很不错的基于模板的通用代码生成器。网站上有大量的模板供下载,如果你有好的也可以提交。而且人家是免费的。
 回复 引用 查看   
#44楼[楼主] 2006-11-30 19:27 TerryLee      
@纶巾客
嗯,以前有很多使用CodeSmith的朋友都转向MyGeneration了

 回复 引用 查看   
#45楼 2006-12-27 13:46 Stone      
用了,但没有模版,希望能下到模版
 回复 引用   
#46楼 2007-03-08 14:46 stone[未注册用户]
很好
 回复 引用 查看   
#47楼 2007-03-08 14:47 Stone      
不错
 回复 引用   
#48楼 2007-06-12 09:12 Sam Xie[未注册用户]
下载不了,能给我发一个么?
xiedan_79@yahoo.com.cn

 回复 引用   
#49楼 2007-11-18 11:12 zzz[未注册用户]
应该是这个吧?
http://www.smartcodegenerator.com/
www.codeplex.com/smartcodegenerator
你那个链接很早就失效了

 回复 引用 查看   
#50楼 2008-01-23 17:59 张跃      
下不到,我是教育网,总是"导航已取消",楼主可以给我发一个么,zyue225 @ 163.com谢谢了哈
虽然我有codesmith和注册机,不过就是用不来,正在看楼主的那个教程

 回复 引用 查看   
#51楼 2008-09-22 22:28 小眼睛老鼠      
我想做一个应对专门业务的代码生成器
不知道哪儿有开源的项目可以提供参考??

 回复 引用 查看   
#52楼 2008-09-22 23:14 小眼睛老鼠      
我也想做个源码生成器
基于模板的
而且是与数据库关联的
我同事做了一个
但是我不会
我最不会的那部是不知道如何从模板转换成代码那步
##系统的变量:DatabaseName,TableName,Columns,ColumnTypeUtility,NowTime
#set($package = "Com.CodeTools.Model")
#set($ProjectName = "×××××××")
#set($ModelName = "××××××")
#set($OrderBy = "ID asc")
#set($FirstPK = -1)
#set($FirstID = -1)
#foreach( $column in $Columns )
#if ($column.PrimaryKey && $FirstPK == -1)
#set($FirstPK = $velocityCount)
#end
#if ($column.Identifier && $FirstID == -1)
#set($FirstID = $velocityCount)
#end
#end
#parse("macro-CSTypes.txt")#parse("macro-SqlDbTypes.txt")#parse("macro-SqlDBTypesLength.txt")
USE ${DatabaseName}

/******************************************************************
* 表名:${TableName} ${ModelName}
* 时间:${NowTime}
******************************************************************/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[${TableName}_Exists]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[${TableName}_Exists]
GO
这个是他模板的一部分
我不知道他怎么区分模板的文本部分
最上面的就是申明变量
后面的这段
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[${TableName}_Exists]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[${TableName}_Exists]
GO
就是生成语句的模板
有时候还会有循环
例如下面这段的foreach
------------------------------------
--用途:增加新的${ModelName}记录
--项目名称:${ProjectName}
--说明:
--时间:${NowTime}
------------------------------------
CREATE PROCEDURE ${TableName}_ADD
#foreach( $column in $Columns )
@${column.Name} ${column.ColumnType}#SqlDBTypesLength("$column.ColumnType" $column.Length $column.NumericPrecision $column.NumericScale)#if($column.Identifier)
output #end
#if($velocityCount < $Columns.Count)
,
#end
#end
模板以txt文本的形式储存
我就不知道怎么将文本以代码的形式运行
而且区分代码部分和模板部分
不知道楼主在这方面有什么建议??

 回复 引用   
#53楼 2008-11-15 15:01 天下88[未注册用户]
怎么用的啊,没有帮助,怎么生成都不知道
 回复 引用 查看   
#54楼[楼主] 2008-11-17 23:23 TerryLee      
@天下88
我想这个应该不难吧。。。

 回复 引用   
#55楼 2008-11-18 16:13 wayne.lew[未注册用户]
下载不了..楼主能不能发一份给我..谢谢
 回复 引用 查看   
#56楼[楼主] 2008-11-19 09:30 TerryLee      
@wayne.lew
我这儿没有代码。

 回复 引用 查看   
#57楼 2009-03-27 12:54 徐培华      
呵呵,楼主很积极噢,
好像只要有人留言,你都会回复,真是伟大 。
这些东西我现在都不懂啊,
很郁闷。
真羡慕。

 回复 引用   
#58楼 2009-10-14 21:36 与子[未注册用户]
能不发份源代码给我啊?我想学习一下啊
 回复 引用 查看   
#59楼 2010-05-11 14:37 小堆爸      
引用zzz:应该是这个吧?<br><a href="http://www.smartcodegenerator.com/" target="_new" rel="nofollow">http://www.smartcodegenerator.com/</a><br>www.codeplex.com/smartcodegenerator<br>你那个链接很早就失效了

对,原来的地址失效了.

 回复 引用 查看   
#60楼 2011-06-29 16:34 风流绅士      
楼主可以发一个源码,到我的邮箱吗,我想学习学习!谢谢了!
邮箱:mls0814@foxmail.com

 回复 引用 查看   
#61楼 2012-01-18 09:02 Dennis.Yang      
已经没法浏览的,自己也写了一个通用的代码生成器。包含一套框架,可以生成解决方案并且全面支持代码模板。
http://www.cnblogs.com/flashbar/archive/2012/01/04/MyGenerator.html