作者H45 (!H45)
看板OOAD
标题[Guideline] DECOUPLE WITH ASSOCIATIONS
时间Fri Nov 9 16:27:05 2007
Prefactoring 这本书有许多有用的 Guideline 散布在文章段落之间
使用简短的几句话为每个段落做一个总结
我认为这些提示对软体的分析和设计满有用的
所以对其中几句话写一些简单的心得献丑给板友们看看。
_________________________
DECOUPLE WITH ASSOCIATIONS
Association classes decouple the two classes being
associated.
﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
※ 节录自 <Prefactoring> P.110
心得:
有时候,甚至经常会遇到两个物件成双成对出现
成双成对是指如果存在一个甲物件,那麽可以推论乙物件也存在
这个时候,有些设计师会把甲和乙的属性和行为写在一个类别里面
但是更直观的作法应该是建立甲类别和乙类别,分别定义甲物件和乙物件的属性和行为
然後再做一个丙类别,让这个丙类别拥有甲类别和乙类别两个成员变数。
这样一来,甲类别和乙类别的属性和行为就可以分开运作。
举个我遇过例子:
A* Algorithm 有定义 OpenSet 和 CloseSet 两个集合
OpenSet, CloseSet 每个元素都是 State 型态 (State 描述一个棋盘中每颗棋子的位置)
如果 State 物件存在,意味着 Path 物件也存在 (Path 描述从一开始到现在的走法)
这个时候,有些设计师会把 State 和 Path 的属性和行为写在一个类别里面
我选择分别建立 State 和 Path 两个类别,定义 State 和 Path 它们俩的属性和行为
然後做一个 StateCollection 当作 OpenSet 的型态,其拥有 State 和 Path 两个物件
StateCollection 可以叫 Path 找下一个棋局状态,也可以叫 State 算出棋局的优劣
Path 在找下一个状态的时候,不需要知道 State 的棋子是象棋、围棋还是西洋棋
State 在衡量棋局优劣的时候,不需要知道 Path 纪录的上一步和下一步是什麽状态
(但是,真的需要的时候就麻烦了......)
这样一来,State 和 Path 的属性和行为就可以分开运作。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
※ 编辑: H45 来自: 140.116.247.13 (11/09 16:27)