• HF Code Designer 代码生成器


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

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

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

    clip_image002

    下面分享一下实现过程。

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

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

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

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

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

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

    1、 读取数据库结构

    获取数据库结构包括:获取数据库名,表视图名,字段属性。获取数据库的方法很多,一般是读取系统表, 返回数据库的sql如下SELECT Name FROM Master..SysDatabases ORDER BY Name, 能返回当前数据库实例的所有数据库,这样不好,把一些不需要的数据库也读取出来了,我采用的方式读取配置文件。只要在配置文件中定义的数据库连接字符串都读出来。配置文件中的数据库连接字符串如下图:

    clip_image004

    表示配置了3个数据库连接,把这三个连接作为可访问的数据库。从配置文件读取数据库连接字符串,使用ConfigurationManager类的方法,代码如下图:

    clip_image006

    读取的数据库加载到树节点上。加载后的效果如下图:

    clip_image008

    选中数据库后,加载数据库中的表和视图,也是利用系统表sysobjects,读取数据库中所有表的sql语句:SELECT * FROM sysobjects where xtype='U' order by name , 读取数据库中所有试图的sql语句:SELECT * FROM sysobjects where xtype='V' order by name,读取之前要制定连接的数据库。

    读取了数据库和表以后,读取表中的字段,这个比较麻烦,需要了解字段在系统表中的存放,读取字段的方法如下图:

    clip_image010

    作了一个关联查询,查询处的结果如下图:

    clip_image012

    信息每个字段的意思一看就明白了。

    2 制定代码模板

    做过cms的都知道什么是模板技术,就是在文件里定义标签,运行的时候用内容替换标签,这个过程很简单,但是要做到强大的替换功能,需要引入模板引擎的概念,说句题外话,asp.net的页面处理机制全部采用这种技术。我使用的模板引擎是第三方的轻量级的著名的模板引擎NVelocity。下面是我定义的代码模板:

    clip_image014

    它是一个txt文件,里面除了模板引擎的关键字和引擎符号,其余的文字可以随便写。生成的代码如下:

    clip_image016

    使用模板引擎需要注意的是,模板中的$变量必须是数据实体的形式提供,不能是其他类型,也就是可序列化的类型才行,否则模板引擎不认识。

    3 代码预览,这个前面已经讲过了,使用的是一个开源的控件。模板生成和代码预览的核心代码如下图:

    clip_image018

    模板技术就是这么强大,掌握了整个技术,可以做出基于模板的web页面,不要担心模板的生成速度,模板引擎是相当快的,几乎感觉不到有什么延迟。基于浏览器的页面呈现和报表控件都是基于这种技术。

    4 生成类文件

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

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

  • 相关阅读:
    git 每次push和pull都需要提交密码
    git push时报错refusing to merge unrelated histories
    打包时,node内存溢出问题解决方法
    dva中roadhog版本升级后带来的问题及解决方法
    Android
    Python Model : glob 文件路径查找
    Tools info
    Python class
    Life Info
    Char 10 格式化及如何正确使用
  • 原文地址:https://www.cnblogs.com/legweifang/p/3378613.html
Copyright © 2020-2023  润新知