代码生成工具的分类及比较
中国有句古语叫做“工欲善其事,必先利其器”,用通俗的话来说就是“磨刀不误砍柴功”,古人的这些话告诉我们:要把事情做好,事先应该准备合适的工具。工具不仅仅包括器具,还包括思想、理论、经验、道德、法律等一切能解决问题的有形和无形的东西。<?xml:namespace prefix = o />
工具有好和坏、适用和不适用之分。比如当你只是需要看一看文本文件的内容时,那么 Notepad 就是一个很好的工具。但是有些人不辨好歹,盲目地“以不变应万变”,“只用 NotePad 完全手写代码”并且以此为荣,“实乃兵家之大忌”。
闲话少说,言归正传。
在你需要一些重复或者相似的代码时,就应该准备好一款名叫“代码生成器”的利器。说到代码生成器,很多人误以为它只能生成程序代码。其实一款灵活的代码生成器还能够生成报表、帮助等一切文本或基于文本的文件(比如 CHM);好的代码生成器的数据来源不仅仅是数据库架构,也可以是数据库数据,还可以是 XML 等其它数据。
代码生成器根据生成逻辑的存储方式可以分为两种:程序固化的和基于模板的。
程序固化的方式将生成代码的逻辑存储在生成器中,一般是通过编写一些字符串的串连代码,这些代码在运行时生成用户的代码。
基于模板的方式将生成代码的逻辑存储在生成器之外的模板文件中,用户可以根据实际需要修改相应的模板,或者自行开发合适的模板。
基于模板的代码生成方式又可以分为:基于标记的和基于编程的。
基于标记的方式定义一套标记规则,在模板中按需插入特定的标记,当这些模板被生成器调用时,标记就被替换为相应的内容,类似于宏替换。
基于编程的方式很像 ASP/JSP/PHP,它采用一种编程语言(或在多种中选择一种),将程序代码和文本代码混合在一起,并通过一定的标记(比如<%%>)来区分。这类模板其实就是一个应用程序,它运行的结果就是用户需要的代码。
下面我们来看看这几种生成方式的比较,首先从开发商的角度来看:
项目\类型 |
程序固化 |
基于模板 |
|
基于标记 |
基于编程 |
||
生成逻辑 |
在生成工具中 |
在模板文件中 |
在模板文件中 |
开发难度 |
低 |
适中 |
高 |
可维护性 |
差 |
好 |
好 |
维护成本 |
高 |
低 |
低 |
再从用户的角度进行对比:
项目\类型 |
程序固化 |
基于模板 |
|
基于标记 |
基于编程 |
||
方便性 |
好 |
好 |
好 |
扩展性 |
差,用户无法自己定制 |
好,用户可以按需定制 |
好,用户可以按需定制 |
适应性 |
差 |
好,但无法适应复杂情况 |
很好 |
定制成本 |
无法定制 |
需要学习一套标记规则 |
需要学习模板编程规则 |
目前网络上比较有影响的代码生成工具都采用基于编程的模板技术。
网络上还有一些号称也是“基于模板”的代码生成器,也将代码生成逻辑存储在“模板文件”中,在“模板文件”中通过编写一系列的程序代码将字符串串连起来,既不是采用标记的方式,也不是采用类 ASP/JSP/PHP 的方式,其本质上和程序固化的方式并无区别,因此不在本文讨论之列。
下面我将列举三种具有代表性的代码生成器进行对比,对比的内容均来自官方网站或其文档,供大家选择时参考。
MyGeneration :在 download.com 上保持下载量第一的 .NET 开发工具。
CodeSmith :获得 aspnetpro.com 用户评选的最佳工具奖。
CodeAuto :最具发展潜力的代码生成工具。
项目\软件 |
MyGeneration |
CodeSmith Pro |
CodeAuto |
性质 |
|||
免费 |
√ |
× |
√ |
源代码 |
× |
× |
√ |
模板 |
|||
类ASP语法 |
√ |
√ |
√ |
模板语言 |
C#,JScript, VB.NET,VBScript |
C#,VB.NET, JScript |
Nuva |
IDE |
√ |
√ |
CodeAuto Studio |
支持命令行 |
√ |
√ |
√ |
Visual Studio 集成 |
× |
√ |
× |
已有模板数量 |
很多 |
多 |
11 |
架构 |
|||
支持数据库种类 |
12 |
1+ |
5+ |
连接串编辑器 |
√ |
× |
√ |
筛选表、字段、关系 |
× |
× |
√ |
表、字段、关系别名 |
√ |
× |
√ |
合并数据架构 |
× |
× |
√ |
定义模板参数 |
√ |
√ |
√ |
定义模板界面 |
√ |
× |
√ |
架构(表、字段、关系等)筛选的重要性:一般的应用都会划分为几个不同的部分,每部分一般对应到不同的表(一般会有所重叠),按照应用的不同将数据库架构划分为相应的子架构,更有利于开发、管理和维护。
设置别名的重要性:有时表名、字段名等由于种种原因(比如国内的一些系统经常用拼音缩写,从一个拼音缩写反推原来的名称真是比翻译天书还难)不符合实际时,别名能使之更易读,更准确。
转载于:https://www.cnblogs.com/Kimphi/archive/2006/09/06/495875.html
代码生成工具的分类及比较相关推荐
- ZeusAutoCode代码生成工具(开源)
ZeusAutoCode代码生成工具 一.简介 Zeus代码生成器是一款自动代码生成工具,旨在快速生成基础的CRUD代码,在此基础上也提供了一些高级功能,做到灵活配置,生成可扩展性强的代码. 后端是基 ...
- 狼奔代码生成工具使用心得
狼奔代码生成工具(http://ltfwan.d33140.jit8.cn)是一款为程序员设计的代码生成器,更是一款软件项目智能开发平台,它可以自动生成ASP.NET页面及后台代码,采用了面向服务的架 ...
- 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。...
在Winform界面开发的时候,有时候我们客户喜欢把功能放在列表界面的顶部,这样界面和功能整齐放置,也是一种比较美观的方式,基于这种方式的考虑,改造了代码生成工具的Winform界面生成规则,把增删改 ...
- CLR_via_C#.3rd 翻译[1.5 本地代码生成工具NGen.exe]
1.5 The Native Code Generator Tool: NGen.exe 本地代码生成工具NGen.exe NGen.exe是和.NET框架绑定在一起的.当用户的机器上安装了一个应用程 ...
- 代码生成工具Database2Sharp功能功能完善及更新
好久没有更新代码生成工具了,因为很多功能基本上能够应付日常的开发工作了,如C#代码生成.数据库文档导出.Sql脚本生成,但用户在使用过程中也发现了一些需要完善的地方,因此继续完善,以求更加实用方便. ...
- 黄聪:C#代码生成工具:文本模板初体验 Hello,World!
C#代码生成工具:文本模板初体验 Hello World 在VS中的文本模板(也称T4),它给我有点CodeSmith的感觉,也是通过模板加逻辑代码混编批量生成代码的方法,但是关于T4的资料不多,而且 ...
- vue可视化拖拽生成工具_vdesjs: 基于vue的可视化拖拽,代码生成工具。提升前端开发效率,或者集成至项目作为在线拖拽工具。(持续迭代升级中)...
vdesjs 介绍 vdesjs是一款基于vue技术栈,可视化拖拽,代码生成工具.我们提供详细的文档来帮助您理解我们工具的实现原理,并且您可以方便的基于vdesjs来扩展您自己的代码生成组件. 技术选 ...
- asp.net mvc脚手架代码生成工具
发现了一个asp.net 脚手架代码生成工具,它是一个免费的工具,自动生成asp.net mvc的CRUD页面,主要特性如下: Uses the LinqToSql data to generate ...
- 代码生成工具之Winform查询列表界面生成
在上面一篇随笔<代码生成工具之界面快速生成>介绍了代码生成工具Database2Sharp的界面生成操作,其中介绍了Web界面(包括列表界面.内容显示.内容编辑界面的生成,另外还介绍了Wi ...
最新文章
- 浅析制造业物料编码在ERP系统中的实施
- boost::generator_iterator用法的测试程序
- 利用 VMware vRealize - 构建和优化云管理
- .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
- fatal error LNK1120: 11 unresolved externals
- 一个 冒泡排序 和 选择排序 的简单c程序
- 一个高并发的测试websocket脚本
- Wl,-rpath的格式问题,Wl,--rpath
- ACM算法竞赛入门 概述
- 量子统计的正则分布和巨正则分布计算思路过程
- python里的pip list是什么意思_python - 运行pip list,抛出异常,这是什么情况
- 系统临时文件的写和读:createTempFile和tempFileContent
- 多层介质中广义反射系数与广义透射系数的计算与编程思路
- matlab中转置运算符,MATLAB 软件中,运算符 / 表示()运算。A. 乘法B. 除法C. 乘方D. 矩阵转置...
- Verilog数字系统设计——8位数字比较器
- 是时候抛弃 Eclipse 转向 IntelliJ IDEA了
- 消息中间件之RabbitMq
- ucos-III前言
- 网页调用腾讯qq在线客服
- 好记性不如烂笔头之Java基础复习笔记
热门文章
- 篝火怎么做_上世纪的“Dyatlov事件”到底是怎么一回事儿,真是未知力量吗?...
- 贝叶斯神经网络的辩论
- 【数据挖掘知识点二】概率基础
- Java实现海明距离简单计算
- Java实现算法导论中凸包问题Jarvis步进法
- eureka的自我保护
- 块级元素 Vs 内联元素
- Windows 技术篇-是否允许程序连接网络误操作解除方法,如何解除阻止程序连接网络,程序连接网络设置方法
- Windows系统高质量Gif录制工具推荐:LICEcap录屏软件,非常小巧好用,只有200k
- Python 技术篇-文件操控:文件的移动和复制