代码生成工具Database2Sharp的架构介绍

1)代码生成工具介绍

Database2Sharp是一款代码生成工具和数据库文档生成工具,该工具从2005年开始至今,一直伴随着我们的客户和粉丝们经历着过各种各样的项目开发,在实际开发中能带来效率的提高及编程的快乐。

Database2Sharp是一款主要用于C#代码生成以及数据库文档生成的工具,软件支持Oracle、SqlServer、MySql、PostgreSQL、Sqlite、Access以及国产达梦等数据库的代码生成,可以生成各种架构代码、生成Winform界面代码、Web界面代码(包括EasyUI和BootstrapWeb界面)、Entity Framework实体框架代码、导出数据库文档、浏览数据库架构、查询数据、生成Sql脚本等,还整合自定义模板和数据库信息的引擎,方便编写自定义模板调试和开发。生成的框架代码支持多种数据库一起使用,也支持不同业务的数据库切割为多个库进行使用,是一种适应性非常强、弹性很好的应用框架。

Database2Sharp推荐采用软件功能“Enterprise Library****代码生成”来生成项目代码,这个架构体系生成整个项目工程框架,包含实体类、数据访问类、业务类、Web页面代码、WCF相关服务层(可选)、Web API服务层(可选),以及各种服务的调用包装层代码等。该架构利用泛型及缓存机制,良好的架构极大简化代码,强大完善的基类机制使您甚至不用编写一行代码就能顺利运行。一个简单点击几次鼠标就能完成一周代码量的代码生成工具,效率惊人、友好体贴,真正的开发好伴侣。

当然,开发的过程是一个繁复、精细的过程,因此Database2Sharp也吸收了来自我们自己的实际需求,以及很多同仁朋友的宝贵意见,一直在改进,一直努力做到更好,以求达到一个更加完美、更加易用的境界。

在我们开发软件的时候,解决方案项目基于一定的分层组织,每个项目分层中,各个类的关系也是确定的,借助辅助工具(结合模板引擎)可以快速生成我们所需要的代码,并极大提高我们软件的开发效率,Database2Sharp代码生成工具就是一款专门针对我们自己框架结构配套的开发工具。

Database2Sharp代码生成工具,主要是基于数据库提取的元数据信息,根据表的信息和关系,字段信息等内容,生成我们框架所需要分层的类代码。

对于Winform开发,可以根据Winform框架或者混合框架的窗体界面类,生成标准的界面代码,列表界面默认具有分页查询、导入导出、高级查询、编辑、删除事件绑定,编辑界面则具有获取数据并显示在控件,保存后执行更新或者写入的操作。

对于Web开发,可以根据EasyUI控件界面或者Bootstrap控件界面的不同,生成对应的视图HTML代码和控制器类代码,同时这些界面默认也具有分页查询,导入导出,显示明细和保存数据的功能。

2)软件功能界面及项目结构

软件主要界面如下所示。

image

软件功能界面如上图所示,左侧为数据库信息展示,右侧为表信息或者代码信息展示,主要功能通过左侧树上的右键或者界面按钮实现。

代码生成工具的项目结构如下所示。

image

其中各个项目负责的内容不同,分为数据核心模块、配置文件模块、Winform项目模块、Web项目模块、混合框架项目模块、数据库脚本项目模块、EF实体框架项目模块、数据库文档模块,如下图所示。

image

根据实际生成代码的需要,我们可以进一步扩展应用模块,利用底层数据库元数据和模板引擎,从而生成更多的项目模板代码。

3)元数据对象及层级关系

其中WHC.CodeGenerator.Core项目是元素获取处理的核心模块,它主要负责从不同数据库类型的数据库中获取相关库的表信息、字段信息、存储过程和视图信息等内容。

其中各个对象的层级关系如下所示:每个数据库实例,包含多个数据库信息,一个数据库对象包括多个表、多个视图、多个存储过程对象,一个表则包含多个字段对象,而每个字段可能包含一个到多个Key对象信息,如外键、主键信息等。

image

代码生成工具支持几种不同的数据库元素获取,数据库元素的获取通过实现IListData接口,从而支持多种数据库类型,包括MS SQLServer、Oracle、Mysql、PostgreSQL、SQLite、Access等数据库,他们从Database基类扩展,形成自己数据库特点的子类,如SQLServer、Mysql类,数据库的操作也是基于Enterprise Library数据库访问模块实现的。继承关系如下所示。

image

4)工具界面向导功能介绍

代码生成工具里面,我们生成代码的时候,一般需要选择哪个库,然后选择表,以及一些配置项,才能进行代码的生成,这个是一个配置向导的功能,主要是基于Microsoft.ApplicationBlocks.UIProcess 组件进行的一个动态配置(UIProcess是微软早期的一个界面管理组件),它是读取配置文件进行的界面处理。如下面是App.config配置文件的内容。

image

其中每个View代表一个配置一个向导界面,如SelectDatabaseView,它对应一个控制器SimpleController。

另外,配置文件的navigationGraph是一个配置型的导向,主要配置我们处理的场景,详细配置如下所示。

image

和这些导航图的配置信息对应,我们代码生成工具也需要提供对应名称的窗体,如下图所示。这些窗体就是我们操作某个代码生成过程的操作界面,如选择数据库界面,选择表界面,确认生成功能界面等。

image
image

另外配置文件里面会定义我们一组处理的导航窗体,用来构建我们一个业务场景,如EnterpriseLibrary架构代码生成操作。

image

然后我们在界面需要定义一个按钮,实现这个代码生成功能的时候,只需要调用这组视图的名称即可,如下代码所示。

image

这样启动后,整个处理导航逻辑就会按照配置文件的顺序一个个调用界面,最后统一生成代码即可。

5)自定义模板代码生成

代码生成工具是基于比较有名的NVelocity模板进行代码文件生成的,因此熟悉NVelocity语法可以修改模板,以适应需要,生成不同内容的文件。

除了可以利用NVelocity模板语法,实现变量定义或者赋值、控制逻辑处理等功能外,还可以利用模板和后台变量进行交互处理。

模板引擎的后台控制规则是在代码生成工具里面封装的,因此可以在NVelocity模板文件里面访问对应的数据库对象,选择的表对象、字段信息等元素内容,或者访问自定义的变量。

基于模板方式的代码生成方式,可以提高生成效率,并且减少维护成本(相对某些硬编码代码生成的方式更优),方便用户对模板进行适当的修改等特点。

关于NVelocity模板语法,详细介绍可以参考伍华聪博客《强大的模板引擎开源软件NVelocity》随笔。

在实际开发当中,自定义模板生成是很多代码生成工具生成代码的重要补充,例如有些项目代码片段需要(例如控件赋值语句,或者控件数据显示语句等),如果能通过自定义模板方式,利用模板引擎的灵活特点,以及已有数据库的结构信息,就很方便生成重复性强、有一定规律的代码。

image

用【选表进行代码生成】方式,可以很好利用后台的数据库表、字段等信息,结合模板生成高效的代码。

另外,为了方便大家对模板引擎NVelocity的了解,在软件工具安装的时候,附带了几个常见的例子,如下所示。

image

例子的代码大致如下所示,主要是让大家快速了解Nvelocity的模板语言VTL的使用。如果对模板引擎更加深入的了解,可以查看我之前的随笔《强大的模板引擎开源软件NVelocity》进一步了解。

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容