代码生成工具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》进一步了解。

代码生成工具Database2Sharp的架构介绍的更多相关文章
- 基于SqlSugar的开发框架循序渐进介绍(3)-- 实现代码生成工具Database2Sharp的整合开发
我喜欢在一个项目开发模式成熟的时候,使用代码生成工具Database2Sharp来配套相关的代码生成,对于我介绍的基于SqlSugar的开发框架,从整体架构确定下来后,我就着手为它们量身定做相关的代码 ...
- 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...
- 利用代码生成工具Database2Sharp设计数据编辑界面
在Winform程序开发中,界面部分的开发工作量一般是比较大的,特别是表的字段数据比较多的情况下,数据编辑界面所需要的繁琐设计和后台逻辑处理工作量更是直线上升,而且稍不注意,可能很多处理有重复或者错误 ...
- 基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持
在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录 ...
- 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码
在前面随笔<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>和<基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)>中介绍了B ...
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
C#反射实现 一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...
- 在代码生成工具Database2Sharp中增加Vue&Element 工作流页面的快速生成
在我们基于框架开发系统的时候,往往对一些应用场景的页面对进行了归纳总结,因此对大多数情况下的页面呈现逻辑都做了清晰的分析,因此在我们基于框架的基础上,增量式开发业务功能的时候,能够事半功倍.代码生成工 ...
- 利用代码生成工具Database2Sharp生成ABP VNext框架项目代码
我们在做某件事情的时候,一般需要详细了解它的特点,以及内在的逻辑关系,一旦我们详细了解了整个事物后,就可以通过一些辅助手段来提高我们的做事情的效率了.本篇随笔介绍ABP VNext框架各分层项目的规则 ...
- 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动
由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...
随机推荐
- IntelliJ IDEA安装与使用
官网:https://www.jetbrains.com/ 点击 点击下载 点击
- docker jenkins安装
https://hub.docker.com/r/jenkins/jenkins jenkins的docker官方镜像地址 https://jenkins.io/ jenkins官方网站 环境: 阿里 ...
- 如何使用1行代码让你的C++程序控制台输出彩色log信息
本文首发于个人博客https://kezunlin.me/post/a201e11b/,欢迎阅读最新内容! colorwheel for colored print and trace for cpp ...
- 用深度学习做命名实体识别(二):文本标注工具brat
本篇文章,将带你一步步的安装文本标注工具brat. brat是一个文本标注工具,可以标注实体,事件.关系.属性等,只支持在linux下安装,其使用需要webserver,官方给出的教程使用的是Apac ...
- 用Python制作的一本道生成器,最后笑喷了!
今天皮一下,众所周知,一本道是一本正经的胡说八道的简称,想必写过议论文的小伙伴,都知道引经据典是议论文高分必备,套上名人的话更加具有说服力是语文老师必教的知识点. 所以呢,今天介绍的这个生成器就走的是 ...
- Java并发专题
——参考于码农求职小助手公众号 1.并行和并发有什么区别? 1. 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生: 2. 并行是在不同实体上的多个事件,并发是在同一 ...
- JS MD5 返回二进制格式
今天靠大佬的帮助,成功的解决了一个弄了好久的问题.起因就是我们要对一个手机号进行加密. 加密方式是把一个字符串进行MD5加密之后,得到原始 16 字符二进制格式.然后把得到的这个字符作为AES的key ...
- Python计算美国总统的身高并实现数据可视化
代码如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt data=pd.read_csv('presi ...
- ABP入门教程2 - 体系架构
点这里进入ABP入门教程目录 介绍 应用程序代码库的分层是一种广泛接受的技术,可帮助降低复杂性并提高代码可重用性.为了实现分层体系结构,ASP.NET Boilerplate遵循域驱动设计的原理. D ...
- GitHub最强技术面试手册:Tech Interview Handbook
摘要: 求职还是需要认真准备的. 原文:超实用技术面试手册,从工作申请.面试考题再到优势谈判,GitHub获30000星 作者:量子位 技术人员求职面试,单刷leetcode上的大厂题库可能还不够. ...