Enterprise-Architect-UML指南.docx
《Enterprise-Architect-UML指南.docx》由会员分享,可在线阅读,更多相关《Enterprise-Architect-UML指南.docx(80页珍藏版)》请在课桌文档上搜索。
1、EnterpriseArchitectUM1.指南1 .应用UM1.进行数据库建模1.1 介绍当须要为软件系统系统供应一种牢靠,敏捷而又高效的对象长久化方法时,当今的设计师和架构师们面临着众多的选择,从技术的层面上,这个选择往往介于完全面对对象,对象关系混合,完全关系化和建立在公开或专有文件格式上的常规解决方案之间(如:XM1.1O1.E的结构化存储1从供应者的层面上,Orade,IBM,Microsoft,POET和其它的公司供应了相像,但是彼此间往往不相容的解决方案.本文仅论述这些选择中的一种,即在完全关系数据库上层面对对象的类模型进行分层.这并不表明它是唯一、成好而又简洁的解决方案,但是
2、从好用的角度看,它是最常用的一种类型,和也是最简洁被用娼的一种.我们先快速阅读两个设计领域的模型,并试图把它们连接起来:第一,介绍用UM1.表达面对对象的类模型;其次.关系数据库模型.对每一个领域我们只涉及联向到我们任务的主要功能.然后捌门将关注从类模型到数据库模里映射的技术和礴.包括对象长久性,对象行为,对象和对象标识之间的关系.我们将总结对UM1.数据profile的回顾(RationalSoftware举荐1.一些面对对象设计,UM1.和关系数抠库建模的相像性也会被提及.类模型是UM1.用来表达软件系统逻辑结构的主要工件.它用来记录数据需求和模型领域内对象的行为.本文不探讨创建和具体描述
3、该模型的技术,我们将假设已经存在一个设计好的类模型,它须要映射到关系数据库上.类榛型类在UM1.中是一个基本的逻辑实体.它定义了一个结构单元的数据和行为.一个类是一个模板或运行时创建实例和对盆的模型.当开发一个陵辑模型,如UM1.中的结构层次,我们将明嫡地把它们当作类来处理.当面对动态图时,如依次图和协作图,我们也要处理类的实例和对象,以及它们运行时的内部动作.数I藏和封装原则是基于作用域效果.类有它的内部数据元素.访问这些数据元素须要通过类对外的行为或接口.遵循这个原则会生成更易于维沪的代码。一个筒触的“Person”类,没有显示状态和行为Peson Address:CAdctess Nam
4、e Age:double ge!Age)int SetAge(0 g!Name stNarreQ.cgrS2Q dMXM.OltflWTHrtJ10 eTfpro.cuaTHd)a:) to5.CM11Of rfocCMaTM0 4Cteckkch.cutt4mfk)这个例子描述了下列行为:一个主健约束(PK);一个外键约束(FK);一个索引约束(Index);一个触发器(Trigger);一个唯T约束(UniqUe);一个存储过程(Proc)一个有效性检查(Check).运用上面供应的标注,我们可以在DBMS层次上,对困难的数据结构和行为建模.另外,UM1.还供应表达逻辑实体间关系的标注.关
5、系UM1.数抠建模profile定义了两个表间造意一种依靠关系.它表示为一构造型的关联并包括一组主键,的卜键,数据profile仍旧须要一种关系始终参加到父类和子类之间,父类定义一个主城,子类实现一个建立于全部或部分父类主键基础上的外梃.这种关系将被区分为:”定义的(假如该子类外犍包含全部父类主健元素)和非定义的(假如只包括部分主键元素I这个关系可以包括基数性约束,以及袖成对的相关主键与外键来建模,并命名为关联角色.下图描述了运用UM1.对这种关系的建模.上图显示I父类和子类之间的标识关系,带有主螳到外槌的角色名物理模型UMI.也供应一些机制来表示数据库的整体物理结施,它的内容和部署位西.我们
6、用恂造型组件来表示一个物理;库.见下图:oDstabase*NainOraOB一个组件表示了一个留敢,可部署的实体.在物理模型中,组件可以映射到一个物理硬件(UM1.的节点X对于数SS库内的关系模式,我们用带Schema构造型的包来表示.一个表可以放国到Schema中来建立它在数据库中的范围和位置.schema*UserChMGrjndohiMGrjndpjrentParentPerson1.3从类模型到关系模型的映射我们已经描述了所关注的两个领域和它们运用的标注,现在将我们的留意力转移到如何映射,及如何从一个领域转换到另一个领域,以下采纳的策略和表达依次是建议性的,而不是必需的.果纳何种步骤
7、和过程要依据个人的须要和环境而定.1 .类的建模首先我“城设从T已经创建的类模里构建一个新的关系数据库模式.明显这是一个最简洁的方向,这是因为摸型始终在我们的限制之下,并且我们能依据类模型来优化这关系模型.在现实环境下,你可趣要在原有数抠模型之上对类模型分层,这是更难的一种状况,具有挑战性。在这里,我们只关注第一种状况,至少类模型会记录元素的关联,继承和聚合关系.2 .标识长久对象建立类模型后,我由预要将类模型的元素分成须要长久性和不须要长久性两类.例如,假如我们采纳“模型-视图-限制的设计模式来设计我们的应用程序,另蚣只在模型部分的类将须要长久状态.3 .假设每一个长久类映射到一个关系装这是
8、一个大的钱设,但是它对大多数状况有用(现在先把继承的问题放一边在一个最简洁模型中,来自逻指模型的类映射到关系表的全部或一部分。这个映射的逻辑扩展是一个单独的对象(或类的实例)映射到表中单独的“行“Parent”关存有唯一标识符(OID),名称和性别国性,并映射到一个关系表PKAddressD:VMeHMNerrieV乐CHXROD:VMCH纸SexVMCHZR来自逻钺横型的“Address”关联成为数推模型中的外碳关系逻物模型中“Address”类变为数据模率中的一个表tb1.A4 .选择一个继承策8g继承可能是从面对对象模型转换到关系模型过程中最简洁出现问题的关系和逻辑结构.关系领域本质上是
9、平面的,每一个实体自身完成,而对象模型用常是一个具有深度的,设计完善的类层次结构.这样深度的类模型可以有多层的继承属性和行为,运行时生成最终全功能的对象:每一个类层次结构有一个单独对应的表,这个表包含全部元素的继承属性-因此,这个表是该层次结构中每个类的联合.例如,人,父母,孩子和孙子可能形成一个单独的类层次结构,并且每个类中的元素都会出现在相同的关系表中;类层次结构中的每一个类有一个对应的表,该表有仅能被该类访问的属性(包括继承属性1.例如,假如“孩子”仅仅从人继承而来,表将仅包含人和孩子”的元素;类层次结构中的每个类的自有属性对应一个表.例如,“孩子”将映射到一个仅带孩子属性的单个表对每一
10、种方法,我们有对应的案例.但是我们举荐第三种方法,因为它最简洁,最简洁维护和跟不简洁出错.第一种方法供应了运行时最佳的性能.其次种方法是第一种与第三种的折更.第一种方法绽开层次结构,在一个表里放置全部的属性,这样便利类层次结构中对类的更新和握取,但是不易于验证和维护.与行”关联的业务规则是难以实现的,因为表中的每一行都可能被实例化为层次结构中的对象.“列”之间的依靠关系可能变得相当困难.此外,对层次结构中任何一个类的更新将可能影响层次结构中其它得个类,如表中的列被添加,删除和修改.其次种方法是一师裹方案,供应了更好的封装和消退空列.可是,对父类的修改可靛须要在全部子类的表中进行复制,更糟的是,
11、有两个或多个子类的父类数据可能被冗余地存储在很多表中;假如父类的原性被修改,那么要花相当的时间去查找相关的子表,并更新受影晌的行.第三种方法精确地反映了对象模型,它将层次结构中的每一个类映射成一个独立的表.父类或子类的更新是在正确空间的局部范围内进行的.对实体的任何修改被严格限定于第个表内,因此表的推沪也就相对简洁.缺点是须要在运行时重构结构层次,来精确产生一个子类的状态,一个Child的对象可能须要一个Person”的成员变量用于表示它的父耕.由于这两者都须要加就,两次调用数据库来初始化一个对象.随着类结肉层次加深,初始化或更新一个单独对象的数据库调用次数也随之增加.当你映射继承关系到关系模
12、型时,理解上述要点是很电要的,这样你就选择最适合你的方案.5 .为每一个类添加一个唯一的对象标识符在关系和对象的领域里,须要唯一标识一个对釜或实体.在对象模型中,非长久对象在运行时通常被干脆引用或对象指针来标识。一旦对象被创建,我们可以用它运行时的标识符来引用它.但是,假如我们将对象写入存描空间,那么如何按须要得到完全相同的实例是一个问题.最便捷的方式是定义OID(对象标识符),它在关注的命名空间是被确保唯一的.依据须要,这可能发生在类,包或系统的层级上.系统级别OID的一个例子可以是一个运用微软guidgen”工具创建的GUID(全局唯一标识符),DAlA68E8E-CD92-420b-BD
13、A7-118F847B71EB.类级别的OlD可以用简洁得数字实现(如:32位计数器1线如一个对象具有对其它对象的引用,它可以采纳运用它们的OID的方法.另除,在运行时有效地将引用的对象从存储区加载到模型中.关于上述OID值的里点是它没有超出定义它为标识符的简洁含义,它们仅是逻辑指针而没有其它意义.在关系模型中,状况往往是不同的.关系模型中标识正常地用一个主键实现,主鞋是一个表中的一组列,它们合起来可以唯一地标识一个行.例如:名称和i址可以唯一地标识一个“客户二其它实体,如:销售员引用客户,它们要实现基于客户主键的外键,这个方法存在的问鹿是:将业务信息(如客户名和地址)嵌入标识符中对我们目标的
14、影响.设想三个或四个表全部具有基于“客户”主键的外键,对于一个须要修改客户主键(如:增加一个用户类型)的系统修改,那么既要修改客户表,也要修改与外键相关的实体,这个工作是特别巨大的.另一方面,赖如一个OID被当作主键实现,并为其它表建立外键,月及修改范围仅限于主表,并且修改的影响也因此大大减小.事实上,一个基于业务数据的主键或许会被修改.如:一个客户可以修改地址和名字,既然这样,这个变更须要被正确的传递到全碍它相关的实体,更不用提变更部分主键信息的困难。一个OID忌是引用同T实体,而不管其它信息怎么变更.在上面的例子中,客户可以修改名称和地址,与它相关联的表不须要被修改.当把对敷模型映射到关系
15、表时,实现完全OlD的标识符比采纳业务联系的主键更加便捷.用OlD做为主犍和外犍的方法将为对象供应更好的加载和更新效率,将维护服务减到最少.事实上,一个与业务相联系的主键可以替换为: 一个唯一性约束或相关列的索引; 派入类行为的业务规则; 或将上述两种结合起来.再次生申,是运用有意义的键还是运用OlD取决于被开发系统的实要.6 .映射属性到列通常,我们将简洁的类数据跟性映射到关系表的列。例如,一个文本联字字段可以分别表示一个人的名字和年龄,这种干脆映射不会引起什么问题,只是简洁地在数据库服务商的关系模型中选择适当的,与类属性相对应的数据类型.对困难属性(即属性为其它对象)运用下面具体的步赛来处
16、理关联和聚合关系。7 .映射关联到外健更困难的美属性(即它由城表其它类)通常建模为关联关系,一个关联是对象间的结恂关系.例如,一个人可以居住在一个地址,当这个人被建模,他会有城市,街道,郃编的属性.在对象和关系领域里,我们倾向于把这个信息当作单独蹴体来构造:地址在对象领域里,地址代表一个独一无二的物理对象,并可能带有一个唯一OlD.在关系领域,一个地址可以是地址表中的一行,该表的主健被用作为其它实体的外犍.在这两种模型中,趋向于移动地址信息到独立实体,这有助于避开冗余数据和提高可维护性.所以对于每一个类模型中的关联,要考虑创建一个从子类到父类表的外健.此关系基千“外窿一主嫌”对,该例用适当的外
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Enterprise Architect UML 指南
链接地址:https://www.desk33.com/p-1503721.html