博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HF Code Designer 代码生成器
阅读量:5036 次
发布时间:2019-06-12

本文共 2033 字,大约阅读时间需要 6 分钟。

最近忙于项目和平台开发好久没写博客了,今天把最近的一个项目总结和大家分项一下。

在平台开发的过程中,代码生成器是必不可少的,Net领域的代码生成器比较多,以前用动软的,最早的那个版本还是开源,自己写了一个插件,总算能按照我的要求输出代码了。但是平台的代码结构不断调整,生成代码的格式不断变化,要不断的修改插件,然后重新编译再发布。比较麻烦,就想换一款代码生成器,看了一下CodeSmith,这不错,是基于模板的,比较灵活,研究了半天模板看着比较繁琐,(本人对新事物的接受能力明显不如从前,大概是老了),其实原理很简单,关键是模板技术,做web前端的人对这个技术并不会陌生,前段时间做表单设计器用过整个技术,所以何不自己开发一个代码生成器?基于前面的积累,做一个这样的代码生成器也就2天的时间。

有这个想法不是一两天了,考虑成熟后就动手了,在原来的应用框架上,经过2天的时间初版基本完成,测试后拿到新项目中使用了。下面是代码生成器的截图。跟动软的界面比较像,但是实现原理完全不一样。

下面分享一下实现过程。

代码生成器需要解决一下几个问题:

1、 读取数据库结构,包括数据库、表、视图和字段。

2、 制定代码模板,按照自己业务代码的要求编写代码模板。可以编写多个模板,例如使用Datatable和Entity的可以定义不同的模板,代码生成的时候选择不同的模板即可。

3、 代码的预览,根据模板生成代码后需要预览一下,为了直观的显示代码,希望有visual studio ide那样的代码编辑器,但是不知道怎么集成这个编辑器,有知道的朋友可以告诉我。没办法,从SharpDevelop开源项目上扒了编辑器,各种无奈,该项目新版的编辑器是wpf,所以目前只能用它低版本的编辑器,不过基本够用了。上图的效果可以看到,比较直观。

4、 代码生成类文件,可以把上面生成的代码复制到类库文件中。也可以批量生成类库文件。

下面具体介绍每一步实现过程。

1、 读取数据库结构

获取数据库结构包括:获取数据库名,表视图名,字段属性。获取数据库的方法很多,一般是读取系统表, 返回数据库的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 生成类文件

这个过程再简单不过了,代码都已经生成了,复制到类文件中即可,可以把整个项目的类文件批量生成出来。不过这要求前面的设计必须很成熟了。否则一旦生成的代码要修改,就要重新生成了。

总算结束了,这只是初版后面会继续完善。最近项目工期紧,有时间的时候再来分享一款查询引擎。

转载于:https://www.cnblogs.com/legweifang/p/3378613.html

你可能感兴趣的文章
mysql 查询条件中文问题
查看>>
svn
查看>>
父组件操作子组件中的值,将父组件的值设置给子组件
查看>>
配置SQL Server 2005 以允许远程连接
查看>>
LSTM学习理解资料
查看>>
Callable与Runable接口 submit与execute区别
查看>>
Obsidium V1.3.0.4 脱壳
查看>>
Linux make语法
查看>>
用户体验之认知地图、思维导图和概念图
查看>>
bzoj3389 [Usaco2004 Dec]Cleaning Shifts安排值班
查看>>
bzoj3173 [Tjoi2013]最长上升子序列
查看>>
第八周作业
查看>>
spring事务隔离级别
查看>>
JavaEE:Eclipse开发工具的相关使用和XML技术
查看>>
LR_问题_如何将场景中的用户设置为百分比形式
查看>>
OpenShift-OKD3.10基础环境部署
查看>>
工程师淘金:开发Android主攻四大方向
查看>>
ASP.NET MVC——Controller的激活
查看>>
javascript中Array对象
查看>>
SQLSERVER中查看谁占用了Buffer Pool
查看>>