AgileEAS.NET平台做为一个快速应用开发平台,其目的为是为了提高应用软件的生产效率,如何软件开发的生产效率,方法是多种多样的;使用工作简化开发中低技术重复工作可以是一种行之有效的途径。
在AgileEAS.NET平台中,我们提供了一个集数据库设计、代码生成、DDL定义与一体的数据实体设计器。
在早期的AgileEAS.NET版本中包含一个代码生成器,用于根据现在数据库生成ORM代码,后来的思路是想介入项目的数据库设计环节,所以设计了这么一个数据对象设计器,提供一个数据表定义工具,在项目的数据库设计阶段(环节),使用数据表设计工具同时定义数据库和数据实体模型,对象设计器会生成数据库设计文档、数据定义语言、基于分层的数据访问层代码。
在基于数据库的应用开发项目中,数据库设计是很一个很重要的过程,而这个过程写数据库设计文件是一个环节,在很多软件公司中,都是使用Word、WPS等文字表格工具写数据库文档,但是数据库文档与数据库建立、程序编写过程脱节。
AgileEAS.NET平台的对象设计工作,试图在这方面进行集成,即设计器产生的模型定义即可以生成数据库文档、数据库定义语句、也可以生成开发过程的代码。
关于数据模型
AgileEAS.NET平台针对应用开发之中的数据对象定义、存储和交流定义一个数据对象结构模型定义文件,数据设计器建立好的项目定义最后存储在以.sdm为扩展名一个数据模型定义文件。
介绍
AgileEAS.NET平台的模型定义既为对象设计的导航定义:
其组织结构为项目包含实体和模型两大类,模型存储数据对象的关系(目前不支持),实体存储数据对象的定义,实体可以选择按目录组织,即如果项目中的实体很多,为了视觉和组织上的方便,建立目录,并在目录中创建实体,只支持一级目录。
AgileEAS.NET系统主界面
主窗口中共包括了5个不同的工作区:系统菜单、工具栏、功能导航栏、业务工作区、系统状态栏,系统中的所有业务功能均可通过系功能导航栏访问操作。
系统菜单
对象设计器采用导航式界面样式,系统功能由导航和菜单两部分组成,提供文件、编辑、工具、窗口和帮助等菜单。
工具栏
工作栏上放置了与系统菜单相关的快速工具栏,可以通过这些工具栏快速访问相关功能模块。
导航栏
系统导航栏上列举了项目中的数据对象组织机构,可以在导航栏上增加新的数据对象、删除现在数据对象,设置项目属性等功能。
导航栏默认显示在界面的左边,如果你想让业务工作区更大些,以便有更大的界面空间处理业务功能,你可以在进入相关的业务功能模块后,通过系统菜单或工具栏的导航命令隐藏或显示功能导航栏。
工作区
工作区是系统工作区域,工作区根据导航和菜单的不同选择与操作,将会加载不同的功能模块,用于完成必要的任务。
状态栏
系统状态栏上显示了系统当前的处理任务及任务处理状态,用于通知用户,以便及时了解系统的运行情况。
关于
提供对当前应用程序的描述信息。包括产品名称、版本、开发商、授权信息等。
数据解决方案
概述
在进行设计数据对象之前,需要先规划自己的项目以及项目中的项目组织,定义好的数据对象项目保存在硬盘上,以方便开发人员的交流和以后的修改。
新建项目
打开文件菜单的新建或者工具条上的建新按钮,对象设计器新建一个数据模型项目,并重置导航栏和工具区。
保存项目
使用文件菜单中的保存或者工具条中的保存按钮,如果项目文件已经存在于文件系统上,则直接保存文件,如果是新建项目后的第一次保存,则打开另存为对话框保持文件。
在文件菜单中还提供了一个别存为功能,用于把设计模型保存到其他的文件之中。
打开项目
使用文件菜单中的打开或者工具条中的打开按钮,弹出文件打开对话框:
选择文件系统已经存在的项目文件并打开,系统根据模型文件重置导航栏和清空工作区:
项目设置
在数据模型中定义了项目的一些命名空间,名称,标题,开发语言,数据库设定这样的东西,在模型设计时可以能过项目参数进行修改。
在导航栏的解决方案节点右键选择“参数设定”,打开参数设定模块:
解决方案参数设计分项目参数和数据库连接参数,上图是项目参数,数据库连接设定:
项目名称、项目标准、程序语言、命名空间等参数用于在生成数据访问层代码的过程之中用到,输出目录为生成的代码、文档、SQL脚本的输出根目录。
数据库连接参数用于从数据库生成数据对象时连接数据库服务器,目前支持SQL2000/2005/2008/Oracle数据库。
数据对象定义
概述
定义数据对象是对象设计器中最重要的工作,在对象定义信息中,存储了程序中ORM对象所需要的对象属性与数据库表的字段映射信息,同时也存储了数据库表的定义信息。
对象设计器设计成的模型用与生成项目的数据库定义文件、数据库DDL脚本以及数据访问层的程序代码。
对象组织
对象设计器中提供了一个目录的概念,即对于数据对象很多的解决方案,我们可以选择在解决方案之中根据应用建立目录,数据对象按目录进行组织。
添加目录
在导航栏中的实体节点右键点开快捷菜单,选择“新建目录”,系统打开目录属性圣诞框:
填写目录名称和说明后点解“确定”按钮,对话框关闭,新建的目录加载到导航栏,“取消”按钮放弃目录的添加。
注意:目录名称不能为空,也不能和现有的目录重名。
目录属性
在导航栏中的某个目录节点右键点开快捷菜单,选择“目录属性”,系统打开目录属性圣诞框:
在目录属性对话框中,可以修改目录名称和说明,完成成点击“确定”按钮完成属性修改,“取消”按钮放弃目录的修改。
删除目录
在导航栏中的某个目录节点右键点开快捷菜单,在弹出的菜单中选择“删除目录”,系统会提示您是否确认删除,点击“是”删除相应的目录。
注意:删除目录是系统中删除目录信息,不删除目录中的数据对象定义,原目录的中的数据对象转移到解决方案实体节点之下。
对象管理
设计器中数据对象有两个存在模型,直接位于解决方案这下,也可以依附于解决方案的目录之中,两种不同的方案可以混合使用,根据项目的规模进行合理构建。
添加对象
在导航栏中的实体节点或者目录节点右键点开快捷菜单,选择“新建实体”,系统工作区打开一个新的对象定义Tab页:
在对象定义Tab页中,可以完成数据对象所指向的数据库表信息定义(数据表名及字段信息)、ORM对象定义(属性及属性与数据字的映射)。
删除实体
在导航栏中的某个目录节点右键点开快捷菜单,在弹出的菜单中选择“删除目录”,系统会提示您是否确认删除,点击“是”删除相应的目录。
注意:删除目录是系统中删除目录信息,不删除目录中的数据对象定义,原目录的中的数据对象转移到解决方案实体节点之下。
定义实体
在日常应用中,对象设计器工作的90%是由上图的界面完成的,在这个界面中,我们完成数据对象的定义,间接的完成了数据库的设计、ORM对象的设计。
实体包含名称,数据表,说明和1-N个属性记录,实体的名称,数据库,说明直接在文本框填写。
实体的属性集合由下面的表格中进行填写,增加新的属性/列,在*标记的行中直接进行写,删除一条记录时使用选中某一条,按下删除键即可。
在属性定义中,属性的类型(程序类型)与数据类型是联动的,即如果在这两个类型中任务选择一种,另一个类型都会根据类型转换器得到一个对应的类型,因为程序中的类型比较广泛,而数据库的类型比较严谨,所以建议的做法是设置数据类型比较准确一些。
实体定义模块的UI包含着7个Tab页,最主要的是实体定义Tab页,还附加了4个代码Tab页、一个数据库脚本、一个文档Tab页。
四类代码
因为AgileEAS.NET平台ORM系统中对实体和表进行了分别的定义,所以针对每个数据对象定义,会生成4个代码文件,分别为表接口、表实现、实体接口、实体实现。
在设计器环境中直接向IDE环境复制代码,使用右键菜单中的全选、复制即可,也可以通过Ctrl+A、Ctrl+C实现。
DDL脚本
针对每个数据对象定义,工具会生成一段SQL脚本,定义数据表的创建和字段,数据表和字段的注视等自描述信息也会一并写进脚步。
同样,和程序代码一样,可以使用右键菜单中的全选、复制即可,也可以通过Ctrl+A、Ctrl+C实现。
文档定义
针对每个数据对象定义,工具都生成一段数据库定义文档,包含数据表名称、说明、所有者,各数据列名称、数据类型、是否为空、主键等信息。
解决方案输出
概述
对象设计器提供基于解决方案的代码输出、文档输出、DDL脚本输出,可以一步生成供vs2005之上打开的数据层项目和解决方案。
输出代码
通过工具菜单中的生成代码功能打开代码输出对话框:
在对话框中选择输入目录,默认为在解决方案属性中设计的输出目录,点击“生成”按钮完成解决方案的生成,输入如下目录结构:
我们在VS环境中打开AgilePM解决方案:
模型修改
对象设计器生成的代码采用了分部类的技术方案,即同一个数据对象把生成的4个代码文件分解成8个代码文件,其中4个代码文件生成与数据对象属性定义相关,建议不做修改,文件名中带有.Generator.cs,并且全部组织在项目的Generat文件夹中,程序代码中有以下注释:
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由SmartEAS.NET/AgileEAS.NET数据模型设计工具生成。
// 运行时版本:2.0.50727.3053
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
另外4个文件用于存储用户自定义的数据访问代码,文件名不带.Generator.cs,生成的代码位于项目的根目录之中。
为什么要做这样的设定呢,这得益长期的开发实践,市面上有很多代码生成工具,虽然说生成器工具可以加速开发,但是生成的代码是绝对不会满足复杂应用,程序员必须对生成的代码增加新的功能或者修改,那么当数据定义模型发生改变之后,重新生成的代码就会把程序员所做的修改覆盖。
采用分部类的方案进行分解之后,我们把与数据模型定义与程序员的特殊业务代码进行了分离,当模型发生改变之后,重新生成的代码保留了程序员的修改,只覆盖Generat文件夹中的代码文件。
接口驱动的数据访问层
AgileEAS.NET平台一直在实践着接口驱动的思想,同时也在建议应用开发基于接口驱动,AgileEAS.NET平台实现一组实用并且简单的ORM,应用开发的数据访问层也就是基于ORM技术的数据访问层。
我们在应用开发中,经常会遇到同样的产品需要运行在不同的数据库系统之上,比台有客户需要运行在SQLServer之上的版本、有的需要运行在ORACLR之上的版本。
在这种情况下,采用接口驱动的数据访问层是一个不错的选择;定义一组数据访问层接口组件及其不同数据库类型的的数据访问层实现组件,业务实现依赖于数据接口层而与数据实现层解耦,运行期不同的数据库类型需求只需要修改系统的配置文件。
有关于数据接口层的配置请参考《AgileEAS.NET平台开发指南》,这里不在详细说明。
对象设计器生成的代码默认是基于接口驱动的数据层,即解决方案中包含两个项目,一个是数据访问接口层,另一个是基于当前设计时环境的数据库实现。
在现实环境中,有些应用我们从一开始就知道他只可能应用于某种单一的数据库环境,对于这种应用,如果还采用基于接口驱动的数据访问层,其修改成本就会略高一些,AgileEAs.NET平台也支持这种非接口驱动的数据层,即生成单一的数据层项目。
在对象设计器的解决方案属性中有一个选项“是否生成接口层”,这个选项默认是选中的,如果只是基于单一数据库,请取消选择,项目的输出方案则变为:
DDL脚本
通过工具菜单中的生成脚本功能打开脚本输出对话框:
在对话框中选择输入文件,默认为在解决方案属性中设计的输出目录之下的SqlScript\TableCreate.sql,点击“生成”按钮完成DDL脚本的生成,用SQL Server Management Studio打开生成的脚本文件:
文档浏览
通过在“工具”菜单中的“文档浏览”即可以在工作区打开一个解决方案文档浏览窗口,显示解决方案中所有数据对象/数据表定义信息:
开发人员可以直接复制到word、wps等字处理软件进行编辑,也可以直接使用“工具”菜单中的输出文件(Rtf、Excel、Html)直接输出数据库定义文档:
输出文档
通过在“工具”菜单中的“输出文件(Rtf)”、“输出文件(Excel)”、“输出文件(html)”打开文档输出对话框:
通过“浏览..."按钮选择输出文件或者使用默认的文件路径,最后点击“生成”按钮完成数据库文件的输出:
Excel格式:
html格式:
Rtf格式:
从数据库生成
概述
对象设计器不仅提供了基于原生的数据对象定义模型生成数据库表对象的能力,同时也提供了从现在的数据库对象反向生成数据对象定义的能力(反向生成)。
操作步骤
通过“工具”菜单中的“从数据库生成”功能打开数据库连接对话框:
选择反向生成的源数据库类型,填写服务器、用户名、密码等信息(默认为解决方案的数据库连接信息),点击“下一步”打开数据库表、视图选择对话框:
数据库中的数据库、视图基于用户/架构、数据表/视图的组织方式,首先选择相应的用户/架构,再选择要导入的数据库表、视图,点击“开始”完成导入数据对象到当前模型定义:
反向生成工具会读取数据库元数据定义信息如字段名称、数据类型、长度、主键、是否为空、注释等信息,生成相应的数据定义模型,开发人员需要进行修改,主要是数据对象的属性名称大小写调整,默认生成的属性为首字母大写,以及补充数据对象、数据库表字段的标题、注释信息。