本文讲解jxTMS中的ER模型的数据字典,整个系列的文章请查看:jxTMS+进销存:概述
前文说过,ER模型要解决的一个核心问题就是语义转换,即在业务模块开发者的角度所看到的业务数据名和数据库中对应的数据表中相应的数据列名。
开发者理解业务需求,使用的是业务语义词汇,思考程序逻辑时也主要使用语义来理顺逻辑,但具体到代码则必须使用数据对象的属性,虽然jxTMS会自动翻译为数据库中相应的数据表的数据列,已经减少了一次转换。但程序员手工完成的语义词到数据对象属性的转换,由于工作量比较大【从数十上百个数据定义中查找到相应的数据定义,然后核对数据类名、属性名,然后逐一copy数据类名、属性名】,不但要打断程序员的思考,关键这种手工转换的错误率也是相当的高,copy错、多处需要copy的忘了一个,笔者犯过太多这种错误了!
更可怕的是,一旦错误,想排查这样低级的bug不但耗时巨大,更是非常的困难,因为这不是逻辑性错误,靠看代码是看不出来的,只能一个转换一个转换的核对。
针对这一问题,ER模型提供了数据字典功能,以自动完成这一转换,既降低了程序员的工作量,关键是要消除手工转换的错误。
数据的定义
数据字典其实就是一个集中的数据定义。如:
data:
//回忆一下我们在关系一文中所定义的关系:业务数据明细
//业务数据明细 bizDataItem attach ObjID to meta
//是bizDataItem和meta两者间的关系
//
//库存表,物料基本信息用了一个通用的meta数据类,并没有专门设计一个专用数据类
物料ID = 业务数据明细.meta.ID,
品牌 = 业务数据明细.meta.Descr,
型号 = 业务数据明细.meta.Type,
物料编码 = 业务数据明细.meta.Special,
物料名称 = 业务数据明细.meta.Name,
单位 = 业务数据明细.meta.Level,
单价 = 业务数据明细.meta.DecimalNumber,
规格 = 业务数据明细.meta.Category,
供应商 = 业务数据明细.meta.Purpose,
//由于是业务数据,所以物料动态信息必须用通用的bizDataItem数据类
物料状态 = 业务数据明细.bizDataItem.State,
物料数量 = 业务数据明细.bizDataItem.Number,
物料用途 = 业务数据明细.bizDataItem.Purpose,
物料需求 = 业务数据明细.bizDataItem.Category,
物料说明 = 业务数据明细.bizDataItem.Descr
;
一个语义化的数据名,如库存商品的品牌,其对应的数据属性是业务数据明细这个关系中meta数据类的Descr属性;相应的,在数据库中也就是保存到meta数据表的Descr字段。
而只要开发者在ER模型中定义好了该数据,则其后的编程与查询时都不再需要知道什么meta的Descr了,全部由ER模型完成自动转换,包括增改查这些操作都只需要使用品牌这个语义词就可以了。
大家一定要牢记:关系是ER模型最基础的基石。任何一个业务功能的应用场景都需要用到几个关系,而语义词只有在此场景下才具有意义,自然也就依赖于这几个关系而存在。即语义词是不能脱离业务功能的场景而存在的,但ER模型不是业务逻辑模型而是业务数据模型,所以语义词不能脱离关系而定义。
简单的说,如果一个语义词可以脱离关系进行定义,那么其也不需要使用ER模型来平添烦恼。
数据的使用
ER模型所定义的数据有如下的用途:
1、业务逻辑处理中数据对象的属性值操作
也就是数据对象的赋值、读取、修改等。这些操作只需要指定相应的数据对象,然后给出语义词即可。jxTMS还会对数据对象的类型和数据定义时所指定的数据类名进行比较,以确保开发者没有误操作。
详见后文的API。
2、定义视图时,也只需要罗列语义词即可
sql语句,待查询数据的格式是【数据表名或数据表的别名.列名 as 数据别名】,而定义视图时,则只需要使用语义词即可,jxTMS会自动将其翻译为相应的sql查询语句,并将数据别名指定为语义词。
详见后文的视图。
3、web端数据表的列名
一般在定义web文件的数据表的列名时,jxTMS推荐的格式是:【col 英文的数据别名 head 中文的表头列名】,如:col itemName head 名称。
而上面刚说过,视图查询出来的数据别名现在也改为中文的语义名了。为了兼容此修改,web文件中的数据表的列名定义就进行了修改:除上面的格式外,别名也可以为中文,且head可省略。而如果head被省略,则别名和表头列名都是一样的。
这样既简化了web文件中数据表的定义,而且前后端一致,大大降低了bug率。
注:jxTMS中的名字,可能会横跨开发jxTMS系统的java、数据库的mysql、前端的javaScript、开发者处理业务逻辑所使用的python,如果使用中文可能会由于这四者的编码等各种原因而出现乱码,所以一般来说,jxTMS都建议名字最好使用英文。语义词使用中文,主要是为了简化开发者的工作以降低bug率而进行的努力
目前jxTMS已经开放个人注册试用,欢迎大家注册试用:
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:
下面的系列文章讲述了jxTMS的一些基本功能: