最近忙于项目和平台开发很久没写博客了,今天把最近的一个项目总结和你们分项一下。前端
在平台开发的过程当中,代码生成器是必不可少的,Net领域的代码生成器比较多,之前用动软的,最先的那个版本仍是开源,本身写了一个插件,总算能按照个人要求输出代码了。可是平台的代码结构不断调整,生成代码的格式不断变化,要不断的修改插件,而后从新编译再发布。比较麻烦,就想换一款代码生成器,看了一下CodeSmith,这不错,是基于模板的,比较灵活,研究了半天模板看着比较繁琐,(本人对新事物的接受能力明显不如从前,大概是老了),其实原理很简单,关键是模板技术,作web前端的人对这个技术并不会陌生,前段时间作表单设计器用过整个技术,因此何不本身开发一个代码生成器?基于前面的积累,作一个这样的代码生成器也就2天的时间。web
有这个想法不是一两天了,考虑成熟后就动手了,在原来的应用框架上,通过2天的时间第一版基本完成,测试后拿到新项目中使用了。下面是代码生成器的截图。跟动软的界面比较像,可是实现原理彻底不同。sql
下面分享一下实现过程。数据库
代码生成器须要解决一下几个问题:浏览器
一、 读取数据库结构,包括数据库、表、视图和字段。框架
二、 制定代码模板,按照本身业务代码的要求编写代码模板。能够编写多个模板,例如使用Datatable和Entity的能够定义不一样的模板,代码生成的时候选择不一样的模板便可。asp.net
三、 代码的预览,根据模板生成代码后须要预览一下,为了直观的显示代码,但愿有visual studio ide那样的代码编辑器,可是不知道怎么集成这个编辑器,有知道的朋友能够告诉我。没办法,从SharpDevelop开源项目上扒了编辑器,各类无奈,该项目新版的编辑器是wpf,因此目前只能用它低版本的编辑器,不过基本够用了。上图的效果能够看到,比较直观。编辑器
四、 代码生成类文件,能够把上面生成的代码复制到类库文件中。也能够批量生成类库文件。ide
下面具体介绍每一步实现过程。测试
一、 读取数据库结构
获取数据库结构包括:获取数据库名,表视图名,字段属性。获取数据库的方法不少,通常是读取系统表, 返回数据库的sql以下SELECT Name FROM Master..SysDatabases ORDER BY Name, 能返回当前数据库实例的全部数据库,这样很差,把一些不须要的数据库也读取出来了,我采用的方式读取配置文件。只要在配置文件中定义的数据库链接字符串都读出来。配置文件中的数据库链接字符串以下图:
表示配置了3个数据库链接,把这三个链接做为可访问的数据库。从配置文件读取数据库链接字符串,使用ConfigurationManager类的方法,代码以下图:
读取的数据库加载到树节点上。加载后的效果以下图:
选中数据库后,加载数据库中的表和视图,也是利用系统表sysobjects,读取数据库中全部表的sql语句:SELECT * FROM sysobjects where xtype='U' order by name , 读取数据库中全部试图的sql语句:SELECT * FROM sysobjects where xtype='V' order by name,读取以前要制定链接的数据库。
读取了数据库和表之后,读取表中的字段,这个比较麻烦,须要了解字段在系统表中的存放,读取字段的方法以下图:
做了一个关联查询,查询处的结果以下图:
信息每一个字段的意思一看就明白了。
2 制定代码模板
作过cms的都知道什么是模板技术,就是在文件里定义标签,运行的时候用内容替换标签,这个过程很简单,可是要作到强大的替换功能,须要引入模板引擎的概念,说句题外话,asp.net的页面处理机制所有采用这种技术。我使用的模板引擎是第三方的轻量级的著名的模板引擎NVelocity。下面是我定义的代码模板:
它是一个txt文件,里面除了模板引擎的关键字和引擎符号,其他的文字能够随便写。生成的代码以下:
使用模板引擎须要注意的是,模板中的$变量必须是数据实体的形式提供,不能是其余类型,也就是可序列化的类型才行,不然模板引擎不认识。
3 代码预览,这个前面已经讲过了,使用的是一个开源的控件。模板生成和代码预览的核心代码以下图:
模板技术就是这么强大,掌握了整个技术,能够作出基于模板的web页面,不要担忧模板的生成速度,模板引擎是至关快的,几乎感受不到有什么延迟。基于浏览器的页面呈现和报表控件都是基于这种技术。
4 生成类文件
这个过程再简单不过了,代码都已经生成了,复制到类文件中便可,能够把整个项目的类文件批量生成出来。不过这要求前面的设计必须很成熟了。不然一旦生成的代码要修改,就要从新生成了。
总算结束了,这只是第一版后面会继续完善。最近项目工期紧,有时间的时候再来分享一款查询引擎。