构建软件解决方案
目标
完成这个模块(章节),你可以:
1、为解决模型定义一个Java技术包层级树
2、识别满足精心设计的领域模型的Java技术代码
进程图
为解决方案定义包结构
1、在UML中呈现Java技术包
2、应用包依赖原则
3、隔离子系统和框架到包中
4、开发一个满足解决方案的包结构
使用UML包
1、一个UML包是一个为了给其他UML图或元素分组的模型结构
2、一个UML包也可以用来代表Java技术包(一组相关的类)
应用包规则
1、包依赖
2、通用闭包原则(CCP)
3、无环依赖原则(ADP)
4、稳定依赖原则(SDP)
5、稳定抽象原则(SAP)
简单的包依赖
“ If changing the contents of a package P2 (might) impact the contents of another package P1,
hen we can say that P1 has a package dependency on P2. ” (Knoernschild page 24)
如果改变包P2的内容可能影响包P1的内容,那么我们可以说P1对P2有包依赖。
----Knoernschild 24页
通用闭包原则
“ Classes that change together, belong together. ” (Knoernschild page 26)
类一起改变,相互属于 ----Knoernschild 26页
1、通用闭包原则(CCP)识别包内聚;强调所有的服务被所有的包提供
2、CCP倾向于通过关心的隔离给包分组
例如:
2.1通过一个用例一起给网络组件分组
2.2给相关的领域模型类一起分组
无环依赖原则
“ The dependencies between packages must form no cycles. ” (Knoernschild page 27)
包之间的依赖必须形成无环。 ----Knoernschild 27
稳定依赖原则
“ Depend in the direction of stability. ” (Knoernschild page 29)
依赖于稳定的方向。 ----Knoernschild29页
稳定性意味着一个组件是固定的,永久的,不变的。
1、业务服务和实体倾向稳定
2、实体比服务更加稳定
3、UI组件倾向易改变
4、工具类倾向于稳定
稳定依赖原则(SDP)和通用闭包原则(CCP)想SunTone AM的阶层划分技术致敬:
1、组件越接近资源层越稳定
2、组件越接近客户端阶层越不稳定
//2017年4月8日21:30:41 加油
稳定抽象原则
“ Stable packages should be abstract packages. ” (Knoernschild page 31)
稳定包应该是抽象包。 ----Knoernschild 31页
这个原则是对类和组件的依赖反转原则的扩展。
1、低稳定包对其他包应该依赖抽象,而不是具体的(类和组件)
2、抽象类和接口倾向于比实现类改变的频率更低
3、决定包的抽象程度的公式是 A= Na / Nc
隔离子系统和框架
subsystem –“ A collection of modules, some of which are visible to other subsystems and other of which are hidden. ”
(Booch OOAD page 519)
子系统--一个模块的集合,有些模块是对其他系统可见,还有些不可见。 ----Booch OOAD 519页
framework –“ A collection of classes that provide a set of services for a particular domain;
a framework thus exports a number of individual classes and mechanisms that clients can use or adapt. ”
(Booch OOAD page 514)
框架--一个类的集合,为特定领域提供服务的集合;框架于是导入一些客户端可以使用或改变后使用的独立类和机制。
----Booch OOAD 514页
1、子系统和框架经常被放在它们自己的包中
2、只有公共类和接口对包以外可见
为解决模型开发包结构
从包依赖原则来,有一些创建包结构的知道基线:
1、把每一个阶层的依赖分组到它们自己的包。
例如,业务服务和实体应该在它们自己的包中。
2、在一个阶层中,把一起改变的组件分到它们自己的包中。例如,为网络应用的客户端阶层组件应该被分在一起。
3、把服务的接口的集合分组进一个包,把它们的实现分进另一个包。
4、隔离子系统到它们自己的包中。
旅馆预定系统的包依赖通过阶层分类
旅馆预定系统的应用层和虚拟平台之间的包依赖
映射领域模型到Java技术类代码
这一部分描述如何使用类图把Java技术代码写到实现建模中:
1、类型信息
2、属性
3、关联
类型信息
Java可以识别三种类的声明:
继承:
接口实现:
属性
UML 语法
[visibility] name [multiplicity] [: type] [= init- value] [{property-string}]
[可见性] 名字[多样性] [: 类型] [= 初始值] [{可写属性字符串}]
1、可见性
2、类的范围
关联
类之间的关联经常通过作为类的属性来实现:
重要的特点:
1、导向
2、多样性
3、合格的关联
4、聚合和组合
导向
导向箭头声明哪一个类必须实现关联和它的访问方法
1、单向箭头
2、双向箭头
关联方法
合理的封装也推荐保持 关联实例变量是私有的和提供共有方面和修改方法
关联多样性
使用数组或集合去保存多样关联对象:
合格的关联
多对多关联可以通过整数索引成为合格。例如:
一个合格的关联也可以使用非整数键去执行查找操作。例如:
聚合
一个集合(类)的部分可以被聚合类外面的共享:
组合
组合(类)的部分一定不要暴露在组合类外面
//组合的整体和部分的生命周期一致
总结
1、很重要的是,如何把组件和类分组到包中。你已经看到一些原则,这些原则可以帮助引导那个过程。
2、UML可以接近的映射大多数面向对象语言。在这一个模块(章),你已经看到多个通用的类图和Java
技术代码之间的映射
//2017年4月9日19:15:17 搞快
//联系我,邮箱:bourne_w@sina.com
交个朋友吧
