潜鱼在渊
Concentrating on Architectures.
posts - 58, comments - 238, trackbacks - 0, articles - 0
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
对象传递和信息完整性
Posted on 2005-12-05 17:56
非鱼
阅读(640)
评论(3)
编辑
收藏
所属分类:
面向对象设计
很少有孤立存在的实体对象,它们之间总是会有所关联。对象们因其职责而分离,又因其联系而聚合。而我们在使用对象时,往往不需要把对象及其聚合的所有其他 对象一次性全部初始化,部分的对象聚合足以提供足够的信息了。这时候,我们使用的对象的信息是不完整的。
当具有不完整信息的对象被做为参数传递时,很可能导致我们对对象失去控制。部分对象的聚合在不同情景下的切换可能导致编程上的错误,而且对系统的维护带来 负面的影响。由于对象职责的分割,对象本身无法理解这个问题,我们无法通过对对象本身进行处理(如增加职责)来消除这种不良影响。如何使用对象的部分信息 是由使用者根据情景要求决定的,编码人员往往对使用情景没有深刻的认识。在连续对应不同情景的处理链中,容易导致编码错误。如下:
1
// Entity objects.
2
public class Obj {
3
private ObjRef1 ref1
;
4
Private ObjRef2 ref2
;
5
6
public Obj() {
7
}
8
9
public Obj(ObjRef1 ref1) {
10
this.ref1
=
ref1
;
11
}
12
13
public Obj(ObjRef1 ref1
,
ObjRef2 ref2) {
14
this.ref1
=
ref1
;
15
this.ref2
=
ref2
;
16
}
17
// Accessors omitted.
18
} // ObjRef1
,
ObjRef2 omitted.
19
20
// Process1
21
public class Prs1 {
22
public Obj method1() {
23
Obj obj
=
new Obj()
;
24
obj.setObjRef1(loadObjRef1())
;
25
// Do something to obj.
26
return obj
;
27
}
// Load method omitted.
private ObjRef1 loadObjRef1() {
// ......
}
28
}
29
30
// Process2
31
public class Prs2 {
32
public void method2() {
33
Obj obj
=
new Clt1().method1()
;
34
// Do something to obj.ref2. Coding error may be found until debug phase.
35
}
36
}
在Process1.method1方法中持久化Obj,在Process2.method2中自行初始化Obj。这个方案面向对象并解决了一致性问题, 但增加性能成本。在Process1.method1中loadObjRef2,不够面向对象,增加了维护成本。
尽可能不使用这种链式的处理,代之以扁平的、可以总控Obj的方式:
1
public class Process {
2
public void proceed() {
3
// Need to change Prs1
,
Prs2's method signatures.
4
Obj obj
=
5
obj
=
new Prs1().method1(obj)
;
6
obj.setObjRef2(
)
;
7
obj
=
new Prs2().method2(obj)
;
8
9
// Future processes can be inserted anywhere inside this method.
10
}
11
}
对于树形结构或整体-部分结构,有一个统一的处理合理的,但内部的复杂性还是很高。
Feedback
#
re: 对象的部分聚合问题
回复
更多评论
2005-12-06 10:06 by
小明
楼主不会不知道Spring framework吧?
Spring IOC能很好帮助你解决这个问题阿
#
re: 对象的部分聚合问题
回复
更多评论
2005-12-06 11:43 by
无言独上西楼
本质上说,IOC并没有什么新鲜玩意,就是强化对接口编程。SPRING是提供了一个这样的框架-装配对象的框架,这样,任何相同接口的对象就可以装配在一起工作,类似于汽车装配线。
但显然没有明白LZ的意思。坦率地说,我也没有明白LZ的意思。
#
re: 对象传递和信息完整性
回复
更多评论
2005-12-07 00:13 by
非鱼
前面描述的不好,给大家造成了理解上的麻烦。希望这次改过后表达足够清楚。不行就再改吧。
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2005-12-06 23:43 编辑过
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子技术博客
相关文章:
应用软件的合理性
On Demand ORM
What is architecture?
分布式系统中的信息对象
架构师不是建筑师
理解架构师
对象传递和信息完整性
软件设计评价(续)
软件设计评价
再议模型
Powered by:
BlogJava
Copyright © 非鱼
日历
<
2008年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
公告
非鱼出品,力求精品。这里的随笔、文章,除非说明,都是原创作品。如需转载,请
留言
并注明出处。一切权利保留。
当前在线:
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(10)
给我留言
查看公开留言
查看私人留言
我参与的团队
架构师之家(0/0)
随笔分类
Java技术(4)
Sybase(6)
其他技术(9)
杂七杂八(20)
笑一笑(2)
管理(4)
面向对象设计(14)
收藏夹
硬件(1)
BLOGs
Anders小明的小屋
David. turing
Donald
Fish Under the Water
Flyingis
Learning
Petit
wfeng007
微雨心情
无言独上西楼的BLOG
江南白衣的BLOG
潜鱼在渊(镜像)
笨笨的思想片断
读书、思考、生活
邢红瑞的Blog
郁也风的BLOG
飞云小侠
Web Links
Java自由人
WWISA
积分与排名
积分 - 87905
排名 - 81
最新评论
1. re: 月薪3万的一道面试题------看看你的IQ
评论内容较长,点击标题查看
--tommin
2. re: 月薪3万的一道面试题------看看你的IQ
91
--下道彩虹
3. re: Java线程安全精解
写的不错,
--极地冰冷
4. re: 月薪3万的一道面试题------看看你的IQ
评论内容较长,点击标题查看
--okokkw
5. re: 月薪3万的一道面试题------看看你的IQ
都是高智力者,什么答案都用书本上的知识来推理,那这就很容易多了。
可结果就那么容易吗?
我的答案是:6月7日
--1
阅读排行榜
1. 应用软件的合理性(14624)
2. [转载]笔记本故障案例50个(7430)
3. Java线程安全精解(5894)
4. 一首感人的MV,Mr. Children:Kurumi(3216)
5. 月薪3万的一道面试题------看看你的IQ (3063)
6. On Demand ORM(2621)
7. 架构(Architecture)和框架(Framework)杂谈(2518)
8. What is architecture?(2444)
9. 理解架构师(2317)
10. 分布式系统中的信息对象(2204)