程序员的私人外包专家

论坛 期权论坛     
选择匿名的用户   2021-5-22 22:26   48   0
<span style="FONT-SIZE: 10pt">【已发表于《程序员》2007年第1期,全名《程序员的私人外包专家——探索CodeSmith代码生成器》,因篇幅限制,杂志上略有删减】<br><br><span style="FONT-SIZE: 14pt"><strong>引言</strong></span><br><br>如果机器猫是个软件开发人员,那么它一定能从口袋里掏出如图1所示的软件,简洁明快的界面上仅有几个必要的输入控件,只要用鼠标轻轻点击这个按钮,硬盘便会像着了魔一样疯狂地发出一阵吱吱的叫声,数分钟后,当这个世界重新安静下来时,一款全新的软件诞生了!<br><img alt="Doraemon&#39;s Software Maker" border="0" height="231" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-a9b89fbe9ff61b532d370bfb103c1b60.JPG" width="306"><br><strong>图1,传说中机器猫的软件开发解决方案</strong><br><br>不过就目前的技术水平来说,这还只能算是“痴人说梦”。那么,有没有什么软件可以减轻程序员的重复性劳动,将“百忙”变为“不忙”,使得大家有更多的时间来陪伴家人和女友呢?现在软件行业不是流行“外包”吗?大公司外包给小公司、小公司外包给个体户,那么程序员可以将手头上一部分编码工作外包给谁呢?除了Ctrl&#43;C、Ctrl&#43;V这对著名的孪生兄弟外,我想CodeSmith会是一个更好的选择。<br><br><span style="FONT-SIZE: 14pt"><strong>What</strong></span><br><br>什么是CodeSmith?从字面上直译可以看作“代码工匠”。这倒是个很拟人化的名称,顾名思义,CodeSmith的目标就是根据模板生成规范可用的代码,为程序员减轻工作负担。<br>程序员是软件开发团队中的最小单位,有什么任务都只能自己一肩扛起而无法再往下分配。但是程序员又是聪明的,他们总是能找到很多美妙的办法来减轻压力,代码生成器就是一个典型的例子。事实上,Visual Studio 2005本身就自带了代码生成的功能,比如您在代码编辑器中输入关键字“for”,然后直接按Tab键,代码生成器便会为您生成好一段模板式的代码:<br><img alt="Visual Studio Generated Code" border="0" height="113" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-599d8745e5f1ff030389ee5bd0decdb3.JPG" width="259"><br><strong>图2,Visual Studio 2005的代码生成功能</strong><br><br>Visual Studio 2005还能自动生成其它更多形式的代码,但终究不如CodeSmith那样强大和丰富,毕竟术业有专攻嘛。CodeSmith是以模板作基础来为程序员生成高质量代码的,模板可大可小,CodeSmith一次能够生成的代码量也就可多可少,这主要靠具体问题具体分析。<br><br>CodeSmith的模板是以“.cst”为后缀名的代码文件,其风格非常类似于ASP.NET。模板中除了大量固定的代码以外,还有遍布于各处的元数据(metadata)。固定代码就是会被CodeSmith原封不动地输出的代码,而元数据则可以被看作是模板中的变量。那么现在我们就通过一个简单的模板文件来了解CodeSmith的工作原理:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 11px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Consolas; BACKGROUND-COLOR: #eeeeee">
  <span style="COLOR: #008080"> 1</span>
  <img align="top" alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-f0cd6c7f9e7ae96feae062cb48f670f0.gif">
  <span style="COLOR: #000000">&lt;%</span>
  <span style="COLOR: #000000">&#64; Template Language</span>
  <span style="COLOR: #000000">&#61;</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000">C#</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000"> TargetLanguage</span>
  <span style="COLOR: #000000">&#61;</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000">C#</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000"> Description</span>
  <span style="COLOR: #000000">&#61;</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000">Demonstrates the most basic template.</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000"> </span>
  <span style="COLOR: #000000">%&gt;</span>
  <span style="COLOR: #000000">        <br></span>
  <span style="COLOR: #008080"> 2</span>
  <span style="COLOR: #000000"><img align="top" alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-f0cd6c7f9e7ae96feae062cb48f670f0.gif"></span>
  <span style="COLOR: #000000">&lt;%</span>
  <span style="COLOR: #000000">&#64; Property Name</span>
  <span style="COLOR: #000000">&#61;</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000">SampleBooleanProperty</span>
  <span style="COLOR: #000000">&#34;</span>
  <span style="COLOR: #000000"> Type</span>
  <sp
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP