对象关系在模型中的实现案例_第1页
对象关系在模型中的实现案例_第2页
对象关系在模型中的实现案例_第3页
对象关系在模型中的实现案例_第4页
对象关系在模型中的实现案例_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对象关系在模型中的实现案例基础软件部 吴春云一、案例介绍: 在一个项目中,存在多个业务对象,各个业务对象间存在各种关系。从结构上来看,对象关系可以分为依赖、继承、关联、聚合、组合,从数量上来看,对象关系可以分为一对一、一对多、多对多。本案例主要介绍如何在开发中通过代码来表示对象间的各种关系,并基于这种关系进行前后端数据交互及持久化。二、关系的概念及实现:1.结构关系1.1继承继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。所以继承关系,确切的说是类与类之间的关系,但是对象又是类的实例,所以就这个角度理解为对象之间的关系,例如父与子的关系,动物与狗的关系,汽车与大众的关系等。 工作流结构部分的实体类:SysNode(环节)、SysTransactNode(办理环节)、SysActivityNode(活动环节)、SysDecisionNode(决策环节)应用了这种继承关系,使得子类拥有了父类环节中的属性,但子类本身代码大大简化,结构清晰。public class SysTransactNode extends SysNodepublic class SysActivityNode extends SysTransactNodepublic class SysDecisionNode extends SysTransactNode1.2依赖依赖就是一个对象A使用到了另一个对象B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是对象B的变化会影响到对象A。比如某人要过河,需要借用一条船,此时某人与一条船之间的关系就是依赖。表现在代码层面,一般指由局部变量、返回值建立的对于其他对象的调用关系,如对象B作为参数被对象A在某个方法中使用。1.3关联 关联体现的是两个类之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。1.4聚合 聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,为多个整体对象共享,比如计算机与CPU、公司与员工的关系等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。1.5组合 组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。2.数量关系2.1一对一 一个人对应一个身份证号,一个身份证号对应一个人;通过身份证号能找到具体的人,通过具体的人也能得到身份证号,不会重复。这里人和身份证号的关系就是一对一关系。2.2一对多(多对一) 一个班级有多个学生,但是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多,学生和班主任的关系是多对一关系。2.3多对多 一个班级有多个学生,他们有语文课、数学课、英语课等多门课。一门课有多个人上,一个人可以上多门课。这里学生和课程的关系就是多对多关系。3.关系的实现 基础平台中,权限规则与基本规则是一对一的关系,字典与字典项是一对多的关系,下面分别介绍如何在数据库层面、服务层面、Javascript层面来表示这两种关系。3.1数据库层面: 数据库中业务对象对应为表或视图,对象关系对应为各表间的关联关系,具体可抽象为外键等和外部关联的字段。a.一对一 在数据库中,建立权限规则表与基本规则表,在权限规则表中通过基本规则ID字段对应基本规则表的主键ID,以此种方式表示权限规则与基本规则的一对一关系。同样,可以在基本规则表中增加一个字段对应权限规则表的主键ID来建立一对一关联。可以根据实际业务需求来选择在哪方设置外键。b.一对多 在数据库中,建立字典主表与字典从表,在字典从表中通过主表字典ID字段对应字典主表的主键ID,以此种方式表示字典与字典项的一对多关系。需要注意的是,在一对多的关系配置中,关系的维护方只能是多方,即只能在多方设置外键,这是与一对一关系不同的地方。 另外可以通过中间表的方式来表示一对多关系,如模块与功能权限,如下图所示: 在中间表中,通过模块ID、功能权限ID分别引用模块表、功能权限表的主键ID表示这种一对多关系。3.2服务层面: Java中业务对象对应为实体,对象关系对应为实体间的映射,在有了能够表示对象关系的表结构后,可以根据表结构设计java实体类,使用ORM框架配置实体类间的关系。下面使用Hibernate框架演示如何配置一对一、一对多关系。a.一对一public class SysAuthRule OneToOne(cascade = CascadeType.ALL) JoinColumn(name = GL_RULE_ID, referencedColumnName = ID) private SysBaseRule sysBaseRule; 上述代码在权限规则实体类中引用基本规则类型的属性,体现了上文所描述的关联关系,OneToOne注解表示权限规则与基本规则是一对一的关系,JoinColumn注解表示在权限规则表中通过GL_RULE_ID字段对应基本规则表的主键。b.一对多public class SysDict OneToMany(cascade = CascadeType.ALL) JoinColumn(name = DICT_ID, referencedColumnName = ID) private List sysSubDictList; 上述代码在主字典实体类中使用list集合封装从字典类型的属性,体现了上文所描述的组合关系,OneToMany注解表示字典与字典项是一对多的关系,JoinColumn注解表示在字典从表中通过DICT_ID字段对应字典主表的主键。 通过使用Hibernate框架进行配置后,在java类间的建立起相应的关系,并与数据库中表之间的关系相对应,使得前端业务数据按照对象关系生成sql语句得以执行。3.3Javascript层面: 基于后端表结构、实体类设计,前端js借助Backbone的Model概念,通过配置Model间关系relations实现Model间的一对一、一对多关系,Js中Model对象就相当于java中的实体类。同时,引入数据模型列表Collection的概念,作为一对多Model的载体。前端数据模型框架关系结构见下图:a.一对一var ModelRule = DetailModel.extend( /基本规则子Model. );var ModelAuthRule = DetailModel.extend( /权限规则主Model. relations: /配置主Model与子Model的关系 type: Backbone.HasOne, /一对一关系 key: sysBaseRule, /key的值需要与权限规则类中引用的基本规则类型的属性名一致 relatedModel: ModelRule /关联基本规则子Model );b.一对多ModelSubDict = DetailModel.extend( /从字典子Model. );var SubCollection = Backbone.Collection.extend( model: ModelSubDict /由从字典Model构成的从字典Collection);var ModelDict = DetailModel.extend( /主字典主Model. relations: /配置主Model与子Model的关系 type: Backbone.HasMany, /一对多关系 key: sysSubDictList, /key的值需要与主字典类中引用的从字典类型的属性名一致 relatedModel: ModelSubDict, /关联从字典子Model collectionType: SubCollection /关联从字典Collection );三、基于关系的数据交互:1.数据库和服务层之间的交互:1.1获取数据:依据由Hibernate生成的sql请求,从数据库查询数据,将结果集提返回并封装到具体的实体对象中。1.2存储数据:服务层通过Hibernate,将业务数据按照对象关系生成执行sql语句,数据库执行sql,形成持久化数据。2.Java层和前端之间的交互:2.1提供数据供前端渲染:前端根据需要发起ajax请求服务层,服务层依据请求,将与业务相关的实体数据序列化为json字符串,提供给前端,前端将json字符串反序列化为Js对象数据,供Model渲染展示。2.2将前端数据传回服务层处理:前端将对象数据序列化为json数据发送服务层,通过SpringMVC将序列化数据直接映射进实体中,或解析序列化数据,依据对象关系载入实体中。服务层依据相关业务活动实现的代码逻辑,处理业务。四、基于对象关系的思考: 以上介绍了对象间有哪些关系,这些对象关系在代码中如何实现,以及基于对象关系的前后端数据交互过程,基于对象间关系来组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论