彩票走势图

企业应用快速开发平台的实现-可视化动态数据建模

转帖|其它|编辑:郝浩|2010-11-04 16:52:37.000|阅读 1040 次

概述:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。 本文主要介绍在企业应用快速开发平台的实现中,如何实现可视化动态数据建模,希望对大家有帮助。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

1 背景

  面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。

  遗憾的是世界是面向对象的,而关系数据库是面向关系的,人们一直在实践如何从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。

  企业级管理系统的开发都不可避免的卷入到其中,许多的ORM的框架试图解决这个问题,但大都仅仅解决数据的变换和存取。然而软件系统所涉及的内容还包括数据建模、权限系统、用户管理、组织结构、工作流程、状态模型、协作模型等一大批紧密相关的内容,如果相关的框架没有进行整合形成一个全套的平台,学习和使用这些框架对于开发人员仍然是一个噩梦,我们的最终目标是将开发人员从无休无止的框架和技术中解放出来,真正关心如何快速满足客户的需求,创造高端的价值。

2 唯一标识和识别

  在面向对象的系统中,任何数据都是对象,为了统一标识每个对象,在本平台中为每个对象分配一个唯一标识符,称为对象ID,对象ID必须在对象的整个生命周期中保持不变。为了确保每个对象的标识符不重复,即使不同的类型,ID也不重复,ID用GUID(全局唯一标识符)。

  在数据库中,所有的数据都存储在二维表中,通过ER分析转换为数据库结构也可以部分表达面向对象模型中抽象、组合、关联等概念,但不能很好处理继承关系,对象模型的数据不能简单的存储在关系数据库中。

  为了方便OR映射和开发实现,数据库中所有的表都使用ID作为主键,避免使用复合主键,复合主键会导致数据库设计和编码复杂化。通过ID就可以唯一标识一个对象,通过一个ID也容易建立对象之间的关系,编程传参数时也方便。

  对象唯一标识ID一般只作为系统运行的内部标识,人不容易识别,系统使用者一般不需要看到ID。一般为不同的业务对象还会添加诸如编码类型的属性,以便方便人眼识别该对象。

  一种简单的做法就是提供流水号编码,可支持定义编码的前缀、后缀、码的位数、填充字符等信息,每当创建对象时,对于“序列”类型的字段系统根据规则自动生成流水码,生成过程一般不需要人的干预,一般也不允许修改系统自动生成的流水码。

  还有更加复杂的编码,比如机械行业经常为零部件编码,一般采用分段编码的方式,系统应该可自定义编码规则,例如定义编码的各个段,包括常量段、流水段、分隔符段、交互段等。在生成一个编码的时候,有些段自动生成,有些段需人机交互生成。

     对于ID识别码、流水号码和自定义编码数据库都采用字符串方式存储,但是在开发平台中分别作为独立的数据类型提供,使得我们的平台的类型比数据库更加丰富。

3 类型系统

  数据库中的数据类型是与业务完全无关的,一般都是原子类型,而我们的系统希望提供更加高层次的类型,以方便开发各类管理信息系统应用,比如我们的系统提供Sequence类型(表达流水码)、Code类型(自定义编码),当然也提供不过User、Organization、Directory、File等更加高层的类型。不同的数据库的数据类型也略有差异,而我们的平台应该做到数据库系统无关,通过ORM的框架屏蔽不同的数据系统之间的差异,业务逻辑的开发人员和二次开发人员不需要关心底层的类型系统,只需要基于平台提供的高层次的类型系统,可以更快的开发应用,由ORM实现与数据库类型的自动映射。

  在系统中支持的复杂数据类型,在架构设计中我们通常称为实体类(Entity Class),在我们的数据模型中称对象类型(Item Type),而数据库一般是没有对象的概念的,都是关系表。我们的办法是,在我们的平台中创建一个Item Type,一般数据库中创建一张表,将Item Type的属性映射到表的字段。数据库的简单类型可以理解为表的某个列,一个简单类型的值可以理解为该表中一行某个列的实例。数据库中的复杂数据类型可以理解为表,复杂数据类型的一个实例可以理解为数据库的表的一行。复合对象在数据库中通过外键关系和关联表来实现。

4 创建对象类型

  为了方便理解对象类型与子类型,下面举例说明一下物料(Material)的概念,生产企业习惯将最终产品之外的,在生产领域流转的一切材料(不论其来自生产资料还是生活资料),燃料,零部件(Part),半成品,外协件以及生产过程中必然产生的边,角,余料,废料以及各种废物统称为"物料"。物料是制造业企业很重要的一个类型。

  在系统中创建“物料”对象类型,左边可以指定对象类型的基本属性,右边有一系列标签页,可以定义类的属性,类的关联等内容。创建一个类,系统会自动生成一些基本属性,如ID,创建人,创建时间,修改人,修改时间等。在属性标签页可以添加物料的自定义属性,如物料的“编码”、“名称”等。在数据库中将自动按模型生成表Material,用来存储“物料”对象类型的实例数据。

图 创建“物料”类型界面

  关于Material类有一些有趣的选项。“不可创建对象实例”相当于面向对象语言类的“Abstract”修饰符,如果勾选则不允许创建当前对象类型的实例;“不可添加子类型”类似面向对象语言类的“sealed”修饰符,如果勾选,则不允许创建当前类型的子类型;“版本策略”定义了该类型的实例是否具有版本。

5 创建子对象类型

  继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

  在平台中,可以直接为已有的对象类型添加子类型,子类型可以继承父类型的一切特性。如下图,通过物料类上的右键菜单可以新建子对象类。

图 为“物料”类型添加子类型

  如下图,在制造业企业中,零部件属于一种特殊的物料,在建模的时候,将part建模为material对象类型的子类型。下图显示如何在属性标签页对零部件的属性进行扩展,例子中添加了零部件的“材料”,零部件的“重量”等属性。

图 定义零部件子类型

  通过这种方式,可以生成类型的层次结构,比如 :

图 定义好物料的所有子类型

6 继承关系在数据库中如何存储

   关系型数据库不支持继承关系,解决继承关系的对象类的数据的存储一般有三种模式,分别是“单表模式”、“多表增量模式”、“多表独立模式”。几种模式比较如下:

    我们的平台同时支持多种存储模式,在创建基类型时,可以定义该类型的存储模式,应该根据各种数据管理的需求的特定选择合适的存储类型。

7 定义枚举类型

  如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。

  在数据建模时大量存在各类枚举类型,比如“国家”就应该一个枚举类型,其中包括了数百个值,“星期”也是枚举类型,包括从“周一”到“周日”7个值。下图定义了零部件类型所包含的枚举值。

图 定义枚举类型“零部件类型”

  为了便于理解,平台中我们成为列表类型,是一个概念。平台内部可以支持基本数据类型也被定义为枚举类型,如下图:

图 预定义枚举类型“数据类型”

  通过平台提供的建模工具,可以方便的定义各种枚举类型,如下图:

图:通过建模定义出来的部分枚举类型

  如何使用枚举类型建模呢,在定义对象类型的属性时,可以添加枚举类型的属性,如下图所以:

图 为零件定义枚举类型的属性“零部件类型”

  创建某个零部件时,零部件类型属性编辑的效果如下图:

图 某个零件实例的零部件类型

8 创建关联类型

  关联类也是一种Item Type,具有类的一切特性,比如可以定义属性,可以再定义关联的关联,可以为关联类型添加子类型等。通过关联可以实现一对一,一对多,多对多的类型之间的关系。一对一比较简单,这里仅对一对多和多对多进行介绍。

  假设系统已定义了供应商类、设备类,在管理管理时需要管理每台设备的供应商,一般来说,一台设备只有一个供应商,而一个供应商可以供应多台设备,则关系建立在设备那边。为“设备”类型添加一个属性“供应商”,其数据源指向“供应商”数据类型。

图 实现一对多的关系

  在模型中有两种方式可以对一对多的关系,这里不展开介绍,下面介绍一下如何定义多对多的关系。在介绍之前先介绍一下BOM(Bill of Material)的概念,BOM的中文意思是物料清单,是描述产品和部件结构的层次结构的数据,通常以表格的方式进行显示和编辑,每个节点可以在包含BOM结构形成产品结构树。通过这个定义看到BOM是一个“物料”类型的自关联。

图 通过BOM关联类定义“物料”到“物料”的自关联

B     OM作为一个关联类应该可以扩展属性,比如一个汽车有多少个轮子,其中“个数”就属于关联的属性。所以打开关联类BOM,扩展BOM类的属性。

图 为BOM关联类定义“数量”等属性

  通过建模,系统自动生成了零部件编辑的UI界面,默认的效果如下:

图 系统自动生成了零部件编辑的UI界面

  上图所示的“上箱体组件”是一个零件类型的实例,而BOM 关系是定义在物料类型和物料类型之间的,为什么零件类型也可以编辑BOM结构呢?很简单,因为零件类型是物料类型的子类型,零件类型继承了来自物料类型的关联定义。

  在编辑“上箱体组件”时,可以从现有的从现有的物料库中选择添加,界面显示如下:

图 从物料类及其子类的实例中选择实例添加到BOM表中

  是不是很简单,通过鼠标,不写一行代码,就可以完成数据结构的定义,系统自动生成相关的界面。当然您可能会对自动生成的界面不满意,您可以通过现有平台提供二次开发能力进行个性化定制。

     


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP