我以asp.net开发为例,浅析代码生成技术在当前软件开发中的位置,及其必要性。
一、 当前软件开发的现状分析
目前,在我们的软件作坊中,很多程序员在代码开发过程中,都会觉得很多代码都是“重复”的。当然这里所说的“重复”,指的是在代码级别上的重复。也就是说基本的代码架构都是一样的,但参数需要做不同的调整。特别是在数据库开发领域,针对于不同数据表的操作,程序员将需要写很多“重复”的代码。
公司内部需求定义代码编写规范,比如名称空间、类、变量等的命名。代码结构的调用规范等问题。公司只能通过文档的形式来要求程序员,执行这个规范。但往往在项目开发的过程中(特别是中后期),项目经理是没有时间和精力来保证程序员的代码规范问题的。他们需要把时间和精力更多的放在项目的需求和功能的设计上。
针对于项目的设计模板,一些程序员往往根据自己的经验,把软件设计的相当复杂。看起来好象,非常体现技术含量,但这对软件的维护和升级是很不好的。可以说软件如果没有维护和升级,那注定是失败的软件项目。
根据我多年针对于软件项目的开发经验,建议公司对于软件设计过程中保持结构的简单性。这点很重要,这样做将大大提高软件的可维护性。
二、亲爱的程序员们在用纯手工编写代码
这是最原始的开发方法,只要是程序员,都喜欢这种开发方法。因为,在此种机制中,程序员可以不受任何约束,可以充分展示自己的聪明才智。
但对于公司或者说一个同队来讲,这个机制是很不好的。在公司或团队中,更多的需要规范性和可读性,个人的聪明才智相比之下不是那么的重要。因为在项目的开发方法中,一个问题,可能有N多的解决办法,但在公司或团队中,需要的是更容易理解的解决方案。虽然有可能这种解决方案是相对比较愚蠢的。
针对于项目经理来讲,不应该把时间和精力放在技术上面,而应该做更好的需求分析和系统设计。这里所讲的系统设计,不是一般意义上的三层或多层架构的设计,而是怎么样更好的实现用户的需求,让用户在软件的使用中,真正觉得软件好用。
针对于公司来讲,系统架构设计思路的统一,将有利于项目的维护安全,不会因为项目经理的调离,而没有办法去有效的管理此项目。
三、 使用简单的代码生成器(Codematic)
Codematic 是一款为 C# 数据库程序员设计的自动代码生成器,Codematic 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model + DAL + BLL + Web 的设计,主要实现在 C# 中对应数据库中表的基类代码的自动生成,包括生成属性、添加、修改、删除、查询、存在性、 Model 类构造等基础代码片断,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。
Codematic 同时提供方便的数据库查询管理,SQL脚本生成,存储过程生成,数据库文档生成,Web项目文件发布,代码生成自动导出文件等多项开发工作中常用到的功能,您可以很方便地进行项目开发。
总结:
另一方面,通过此软件生成的代码需要使用Codematic自带的类库才能正常运行。此种机制,针对与高端软件客户,是很不理想的。因为,我们不能保证,此类库中的代码是安全的。
三、 使用自己编写的代码生成器
自己编写代码生成器,也是一种解决方案。针对于每个公司自己的特殊情况,来定义自己的代码生成工具。但此种方法,一方面需要自己开发代码生成工具,工作量比较大,另一方面,对于模板定义,很大部分都需要写死在代码生成工具中。因为通过简单的XML定义,是没有办法真正做到代码生成的灵活性。
二、 推荐使用更为专业的代码工匠(CodeSmith)
CodeSmith是一个基于模板的代码生成器。模板是所生成代码的式样。开发者或架构师可应用CodeSmith来生成任何文本语言的代码。其结果(生成的代码)可通过属性来自定义并包含在众多的标准属性类型之中。另外,用户还可建立自定义的属性类型。
CodeSmith实现原理主要可以从以下几点来描述:
1、支持执行代码块语法;
通过类似于Asp.Net的语法规范,来定义代码块,将基本不变的部分写死在模板中。模板通过外部定义的属性,来动态的产生需要的代码块。
2、支持内联表达式语法;
在模板定义中,可以使用Asp.Net的语法,来定义表达式。通过顺序、判断、循环等基本程序语法,来根据业务逻辑产生需求的代码。
3、 支持Code Behind功能;
Code Behind指的是代码分离技术。即在设计模板时,可以将部分逻辑函数写入到通用的类库中。代码生成时,可以通过INCLUDE命令加载这些函数类库。
4、 支持属性申明;
通过配置模板的属性,CodeSmith将根据程序员的业务需求,调入外部参数。
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据库组成表31559 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!