本文将把摘要设计中的 “实现”部分,具体化。
一、实体映射
功能限定:我们规定每一个界面指完成对一个表的维护。目的很明确,这样做编程简单,用户使用也比较简单,菜单功能项和界面是一一对应的。
1、实体设计约定(表设计约定)
为了后期处理的方便,我们对表的设计进行一些约定。
1. 总则
遵守1-3NF,或者 4NF,5NF
2.部分数据冗余的支持
由于严格遵守NF的规定,数据库在维护时,需要对编程者要求比较高,一般情况下会影响编程质量,或者导致效率下降。因此,允许冗余字段,减少过多的表引用。
3.不支持复杂类型数据
复杂数据类型是指 json 数据类型,这种类型的维护,需要单独代码实现。
2. 每个表的主键名固定为pk
3. 每个表需包含一个 name字段,用以标识行的名称
4. 每个需包含以下三个辅助字段(mysql语法)
1) last_modi_by varchar(16) 最后更新的账号
2) last_modi_time datetime 最好更新的时间
3) remark varchar(128) 备注
框架默认这三个字段存在,尤其是 1和2 两个字段,会自动更新。
2、界面元素和实体映射约定
为了简化代码实现,引入框架之后,只需要编程人员进行界面设计,就可以完成基本的增删改查功能,要实现这一点,需要对界面元素属性进行约定,从而“自动”完成界面元素和实体的映射;
1、界面名称命名约定
总则:遵守常规的C#变量命名方法
特殊约定:和实体变量无关的控件命名遵守总则要求,和实体变量相关的控件名称命名规则如下
名称由三部分组成,前缀_实体字段名
前缀:用以标明控件的类型
_: 标明此控件是映射的实体变量
实体字段名: 和实体字段名相同,框架据此名称生成sql语句。
2、控件使用约定
使用 Panel 和Group 控件记录表名称,tag中标明是主表数据还是字表辅助显示数据。其内部元素属于这个表。
其余字段约定如下:
字符型数据:textBox
数据类型:NumericUpDown
bool 类型: CheckBox
时间类型: DateTimePicker
3、其他约定
浏览数据显示:DataGridView , 控件名称的后缀是 表名称
引用表数据:后面将专门讨论这个问题
二、数据输入合法性检查
1、输入时合法性检查
两种方式:1)利用现有控件的自身的类型属性进行限制 2)tag中增加正则表达式进行类型限定
2、保存合法性检查
单值唯一性检查:在tag中增加 正则表达式,表示检查唯一性
多值唯一性检查:在tag中增加正则表达式,建立字段的关联关系(暂不支持)
3、删除合法性检查
主要利用数据库的引用关系
4、信息提示
tag中保存提示信息。
另外框架提供统一的信息提示框。
三、引用表数据录入和显示
有两种情况
1、没有冗余信息
即主表中指包含一个外键,实际信息要通过查询引用表获得。
2、含有冗余信息的引用
主表中除了外键,还有部分引用表的数据,这样做的目的是方便。(有错误数据的风险)
这两种情况,都使用DataGridView 来作为输入和显示控件。
约定如下:
1) tag: 标明这个dgv是一个引用表
2) dgv的名字的第三部分是外键名
3) dgv的column 是字段名称
4) 用Column 的headtitle 进行内容的显示,并且为了符合一般意义的显示,将外键值设置为隐藏模式。(框架自动处理为这种模式)
5)获得焦点时,增加高度,便于选择;失去焦点时,表现为单行模式;
6)冗余字段在tag中标识
4、辅助工具类
将提供一个辅助工具类,用来进行上面各种功能的支持
1、数据输出函数
功能:给定DataRow 数据,映射到界面控件上并进行显示;
2、SQL 语句生成函数
根据增删改查和界面字段映射,生成 SQL语句(insert , update ,select , delete)
3、其他
正则表达式识别函数,消息显示函数等等等等。
MaraSun BJFWDQ
2023-01-29