爪哇岛的一个山洼。

2006-10-23

【java教程】实践MDA之AndroMDA教程:[第四节] 系统设计(2)

设计系统类图
用 MagicDraw 进行类图设计和利用Rose等其他建模工具建模具有极大的相同点,但为了使建好的模型能够通过代码生成工具的验证并生成代码,因此在设计时需要遵循一定的规则。常用的规则有如下几点:
1、描述类的常用构造型(Stereotype)有:Entity、Criteria、Service、ValueObject、Enumeration等。
Entity构造型:使用这个构造型的类是用来储存持久数据的类,是持久对象,在代码生成的过程中将生成Hibernate映射文件、相应的DAO的java文件以及对应的数据库表。
Criteria构造型:使用该构造型的类用来储存复杂查询的参数,主要用于复杂的多条件查询中。
Service构造型:使用该构造型的类表示Service层,将生成Spring的Service 的java文件,并自动配置在Spring的配置文件中。
ValueObject构造型:该类型主要用在页面显示方面,当持久对象不能直接显示在页面上的时候,就需要把持久对象转换成ValueObject对象后才在页面上显示,代码生成工具将根据该类以及于持久对象的关联生成ValueObject的java文件以及在DAO中生成ValueObject和持久的对象互相转换的方法。
Enumeration构造型:该类型表示枚举,将生成枚举java文件。
2、持久对象(Entity)的visility要设置为public,这样在生成代码后,持久对象java文件中属性的get/set方法才是public的。
3、在设置属性的时候,属性类型一定要用androMDA提供的类型,即:要使用带有[datatype]后缀的类型(例如:Long [datatype]),其他类型将不会被代码生成工具识别。
4、在持久对象中添加查询方法时,范围(scope)属性有两个值:instance和classifier。如果设置成instance,则查询方法将被生成在持久对象的类里面;如果设置成classifier,则查询方法将被生成在持久对象对应的DAO文件中。应该取何值,取决于使用何种结构来进行设计。
5、持久对象属性的有很多常用的构造型(Stereotype),其中Identifier[Attribute]表示主键,将生成对应数据库的主键,Unique[Attribute]表示该属性取值必须唯一。
以上只是大致列出了一些设计规则,详细内容请参见官方网站。
我们的示例程序才用了Hibernate、Spring、Struts的三层架构,通常在设计类图的时候,首先设计持久对象,也称为数据建模,相当于传统的软件开发过程中的数据库设计。我们的示例程序非常简单,因此持久对象的设计也比较简单,设计图如下:




如图所示,Person和Car具有一对多的关系。
设计完持久对象以后就开始设计Service和Controller了,Controller里面的方法用来在活动图中调用,换句话说,Controller是用来在Struts的Action中调用。之所以将Action和Controller分离出来,主要是让开发者专注于业务逻辑的开发,而避开Action配置的技术细节。
下图是汽车管理的上层设计类图:


上图使用了ValueObject和Enumeration等构造型。
下图是用户管理的上层设计图:

至此,示例程序的设计基本完成,接下来的工作是对AndroMDA进行一些必要的配置,将教程的下一节进行详细描述。

2 条评论:

匿名 说...

正在学习中,写得非常详细。谢谢。

widen 说...

呵呵,不客气,希望对大家有帮助,共同进步。