代码生成工具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)软件功能界面及项目结构
软件主要界面如下所示。
软件功能界面如上图所示,左侧为数据库信息展示,右侧为表信息或者代码信息展示,主要功能通过左侧树上的右键或者界面按钮实现。
代码生成工具的项目结构如下所示。
其中各个项目负责的内容不同,分为数据核心模块、配置文件模块、Winform项目模块、Web项目模块、混合框架项目模块、数据库脚本项目模块、EF实体框架项目模块、数据库文档模块,如下图所示。
根据实际生成代码的需要,我们可以进一步扩展应用模块,利用底层数据库元数据和模板引擎,从而生成更多的项目模板代码。
3)元数据对象及层级关系
其中WHC.CodeGenerator.Core项目是元素获取处理的核心模块,它主要负责从不同数据库类型的数据库中获取相关库的表信息、字段信息、存储过程和视图信息等内容。
其中各个对象的层级关系如下所示:每个数据库实例,包含多个数据库信息,一个数据库对象包括多个表、多个视图、多个存储过程对象,一个表则包含多个字段对象,而每个字段可能包含一个到多个Key对象信息,如外键、主键信息等。
代码生成工具支持几种不同的数据库元素获取,数据库元素的获取通过实现IListData接口,从而支持多种数据库类型,包括MS SQLServer、Oracle、Mysql、PostgreSQL、SQLite、Access等数据库,他们从Database基类扩展,形成自己数据库特点的子类,如SQLServer、Mysql类,数据库的操作也是基于Enterprise Library数据库访问模块实现的。继承关系如下所示。
4)工具界面向导功能介绍
代码生成工具里面,我们生成代码的时候,一般需要选择哪个库,然后选择表,以及一些配置项,才能进行代码的生成,这个是一个配置向导的功能,主要是基于Microsoft.ApplicationBlocks.UIProcess 组件进行的一个动态配置(UIProcess是微软早期的一个界面管理组件),它是读取配置文件进行的界面处理。如下面是App.config配置文件的内容。
其中每个View代表一个配置一个向导界面,如SelectDatabaseView,它对应一个控制器SimpleController。
另外,配置文件的navigationGraph是一个配置型的导向,主要配置我们处理的场景,详细配置如下所示。
和这些导航图的配置信息对应,我们代码生成工具也需要提供对应名称的窗体,如下图所示。这些窗体就是我们操作某个代码生成过程的操作界面,如选择数据库界面,选择表界面,确认生成功能界面等。
另外配置文件里面会定义我们一组处理的导航窗体,用来构建我们一个业务场景,如EnterpriseLibrary架构代码生成操作。
然后我们在界面需要定义一个按钮,实现这个代码生成功能的时候,只需要调用这组视图的名称即可,如下代码所示。
这样启动后,整个处理导航逻辑就会按照配置文件的顺序一个个调用界面,最后统一生成代码即可。
5)自定义模板代码生成
代码生成工具是基于比较有名的NVelocity模板进行代码文件生成的,因此熟悉NVelocity语法可以修改模板,以适应需要,生成不同内容的文件。
除了可以利用NVelocity模板语法,实现变量定义或者赋值、控制逻辑处理等功能外,还可以利用模板和后台变量进行交互处理。
模板引擎的后台控制规则是在代码生成工具里面封装的,因此可以在NVelocity模板文件里面访问对应的数据库对象,选择的表对象、字段信息等元素内容,或者访问自定义的变量。
基于模板方式的代码生成方式,可以提高生成效率,并且减少维护成本(相对某些硬编码代码生成的方式更优),方便用户对模板进行适当的修改等特点。
关于NVelocity模板语法,详细介绍可以参考伍华聪博客《强大的模板引擎开源软件NVelocity》随笔。
在实际开发当中,自定义模板生成是很多代码生成工具生成代码的重要补充,例如有些项目代码片段需要(例如控件赋值语句,或者控件数据显示语句等),如果能通过自定义模板方式,利用模板引擎的灵活特点,以及已有数据库的结构信息,就很方便生成重复性强、有一定规律的代码。
用【选表进行代码生成】方式,可以很好利用后台的数据库表、字段等信息,结合模板生成高效的代码。
另外,为了方便大家对模板引擎NVelocity的了解,在软件工具安装的时候,附带了几个常见的例子,如下所示。
例子的代码大致如下所示,主要是让大家快速了解Nvelocity的模板语言VTL的使用。如果对模板引擎更加深入的了解,可以查看我之前的随笔《强大的模板引擎开源软件NVelocity》进一步了解。
转自:https://www.cnblogs.com/wuhuacong/p/10967935.html